Frage

Ich habe gearbeitet, was klingt wie einfache Funktionalität für viel zu lange dauern. Die Idee ist, dass ich eine Anwendung mit einem TreeView haben. Diese treeview stellt Inhalte einer Datenbank in Dateien und Ordnern, ähnlich wie Windows Explorer. So macht es Sinn, dass der Benutzer die Dateien / Ordner aus meiner app und in Windows Explorer ziehen kann.

Ich entschied, dass ich sollte einen IStream verwenden, wenn sie eine Datei oder einen IStorage ziehen, wenn sie einen Ordner ziehen. Nach einer sehr langen Zeit und das Lernen viel mehr, als ich jemals über Win32 / COM (und einen Schub von einer sehr hilfreich Person hier), wissen wollte, hat ich endlich, dass IStream oder IStorage erstellt.

Dann fand ich, dass dieser IStream passiere oder Windows Explorer IStorage aus, ich hatte es in einem STGMEDIUM zu bekommen. Natürlich, ich bin mit, die medium.tymed entweder IStream oder IStorage sein, je nachdem, welche aber, wie ich es die medium.unionmember verstehen ein Zeiger auf die IStream/IStorage sein muss.

Ich habe versucht, das feste Schlüsselwort (aber es ist nicht blitfähig, natürlich), habe ich versucht, einfach das gestrahlten, was zu einem Byte-Array konvertiert wird, kann aber nicht mit einem Weg, um das zu erreichen, ich habe versucht, mit GCHandle es an Pin (aber es ist noch nicht blitfähig), und einige andere Dinge, die nicht funktionierten.

Also meine Frage ist: Gegeben IStorage s und STGMEDIUM m, wie bevölkern ich m.unionmember so dass Windows Explorer glücklich sein und das Drop akzeptieren

?
War es hilfreich?

Lösung

Normalerweise C Gewerkschaften verwenden StructLayout.Explicit in C # dargestellt. Dies wird wahrscheinlich nicht in Ihrem Fall jedoch - während Sie IStream und IStorage Referenzen wie das Overlay kann, wird der Einweiser versuchen beide Marschall. Ihre beste Wette ist wahrscheinlich nur das Feld als IntPtr in Ihrer Erklärung STGMEDIUM zu erklären, und verwenden Sie Marshal.GetIUnknownForObject es zu initialisieren.

Andere Tipps

ich glaube, das Thema durch lange veraltet ist, aber alle, die für eine Datei per Drag & Drop diese Diskussion überprüfen und insbesondere den Posten des dbirdz: http://www.daniweb.com/forums/thread166429.html

In meinen Augen wäre dies sogar auf diese Anwendung gilt, würde ich versuchen, meinen Strom in eine temporäre Datei zu schreiben, die dann in seine Position verschoben werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top