Je travaille sur ce qui semble être une simple fonctionnalité depuis trop longtemps maintenant. L'idée est que j'ai une application avec un TreeView. Cette arborescence représente le contenu d'une base de données organisée en fichiers et dossiers, un peu comme l'explorateur Windows. Il est donc logique que l'utilisateur devrait être capable de faire glisser ces fichiers/dossiers hors de mon application et dans l'Explorateur Windows.Faites glisser et déposez de C# vers Windows Explorer avec IStorage/IStream
J'ai décidé que je devrais utiliser un IStream
s'ils font glisser un fichier ou un IStorage
s'ils font glisser un dossier. Après un temps très long et apprentissage plus que jamais je voulais savoir sur Win32/COM (et un coup de pouce d'une personne très utile ici), j'ai enfin créé IStream
ou IStorage
créé.
Ensuite, j'ai trouvé que pour passer ce IStream
ou IStorage
à Windows Explorer, je devais l'obtenir dans un STGMEDIUM
. Bien sûr, le medium.tymed sera IStream
ou IStorage
, en fonction de ce que j'utilise, mais si je comprends bien le medium.unionmember
doit être un pointeur sur le IStream/IStorage
. J'ai essayé d'utiliser le mot-clé fixed (mais ce n'est pas blablable, bien sûr), j'ai juste essayé de convertir la chose blasted en un tableau d'octets, mais je ne peux pas trouver un moyen d'y arriver, J'ai essayé d'utiliser GCHandle pour l'épingler (mais il n'est toujours pas blittable), et plusieurs autres choses qui n'ont pas fonctionné.
Donc ma question est la suivante: donné IStorage s
et STGMEDIUM m
, comment puis-je remplir m.unionmember
de sorte que Windows Explorer sera heureux et acceptera la baisse?
Si quelqu'un connaît une implémentation complète de IStream/IStorage pour une URL http, veuillez poster une autre réponse ici, il y a quelques résultats google pour ce problème. –
http://stackoverflow.com/questions/3168145/download-a-file-using-windows-istream –