Я уже давно работаю над тем, что звучит как простая функциональность. Идея состоит в том, что у меня есть приложение с TreeView. Это treeview представляет содержимое базы данных, организованной в файлы и папки, подобно Windows Explorer. Поэтому имеет смысл, что пользователь должен иметь возможность перетаскивать эти файлы/папки из моего приложения и в проводник Windows.Перетаскивание из C# в Windows Explorer с IStorage/IStream
Я решил, что должен использовать IStream
, если они перетаскивают файл или IStorage
, если они перетаскивают папку. После очень долгого времени и обучения больше, чем я когда-либо хотел узнать о Win32/COM (и толчок от очень полезного человека здесь), я, наконец, создал IStream
или IStorage
.
Тогда я нашел, что передать это IStream
или IStorage
в Проводник Windows, мне пришлось его получить в STGMEDIUM
. Конечно, medium.tymed будет либо IStream
, либо IStorage
, в зависимости от того, что я использую, но, как я понимаю, medium.unionmember
должен быть указателем на IStream/IStorage
.
Я пробовал использовать фиксированное ключевое слово (но это, конечно, не горит), я пробовал просто преобразовать взорванную вещь в массив байтов, но не могу придумать способ сделать это, Я попытался использовать GCHandle, чтобы прикрепить его (но он все еще не горит) и несколько других вещей, которые не сработали.
Так что мой вопрос: Учитывая IStorage s
и STGMEDIUM m
, как я могу заполнить m.unionmember
, чтобы Windows Explorer был счастлив и принял падение?
Если кто-то знает о полной реализации IStream/IStorage для URL-адреса http, пожалуйста, напишите здесь другой ответ, для этой проблемы существует несколько результатов Google. –
http://stackoverflow.com/questions/3168145/download-a-file-using-windows-istream –