Ich habe gerade an etwas gearbeitet, das jetzt einfach zu lang klingt. Die Idee ist, dass ich eine Anwendung mit einem TreeView habe. Diese Baumansicht stellt Inhalte einer Datenbank dar, die in Dateien und Ordnern organisiert sind, ähnlich wie Windows Explorer. Es ist also sinnvoll, dass der Benutzer diese Dateien/Ordner aus meiner App in den Windows Explorer ziehen kann.Drag & Drop von C# nach Windows Explorer mit IStorage/IStream
Ich entschied, dass ich eine IStream
verwenden sollte, wenn sie eine Datei oder eine IStorage
ziehen, wenn sie einen Ordner ziehen. Nach einer sehr langen Lernzeit und viel mehr als ich jemals über Win32/COM wissen wollte (und ein Anstupsen von einer sehr hilfsbereiten Person hier), habe ich endlich das IStream
oder IStorage
erstellt.
Dann habe ich festgestellt, dass, um diese IStream
oder IStorage
aus Windows Explorer zu übergeben, musste ich es in einem STGMEDIUM
bekommen. Natürlich wird der medium.typed entweder IStream
oder IStorage
sein, je nachdem, was ich benutze, aber wie ich es verstehe, muss der medium.unionmember
ein Zeiger auf den IStream/IStorage
sein.
Ich habe versucht mit dem festen Schlüsselwort (aber es ist natürlich nicht blitable), ich habe versucht, nur die gestrandeten Sache in eine Byte-Array konvertieren, aber kann nicht mit einer Möglichkeit, das passieren, Ich habe versucht, GCHandle zu verwenden, um es festzuhalten (aber es ist immer noch nicht blitable), und einige andere Dinge, die nicht funktionierten.
Also meine Frage ist das: Gegeben IStorage s
und STGMEDIUM m
, wie bevölkere ich m.unionmember
, so dass Windows Explorer wird glücklich sein und den Tropfen akzeptieren?
Wenn jemand eine vollständige Implementierung von IStream/IStorage für eine http URL weiß, bitte posten Sie eine andere Antwort hier, es gibt einige Google-Ergebnisse für dieses Problem. –
http://stackoverflow.com/questions/3168145/download-a-file-using-windows-istream –