Tôi đã làm việc trên những gì có vẻ như chức năng đơn giản quá lâu. Ý tưởng là tôi có một ứng dụng với TreeView. Cây treeview này đại diện cho nội dung của một cơ sở dữ liệu được sắp xếp thành các tệp và thư mục, giống như Windows Explorer. Vì vậy, nó có ý nghĩa rằng người dùng sẽ có thể kéo những tập tin/thư mục ra khỏi ứng dụng của tôi và vào Windows Explorer.Kéo và thả từ C# vào Windows Explorer với IStorage/IStream
Tôi quyết định rằng tôi nên sử dụng IStream
nếu họ kéo tệp hoặc IStorage
nếu họ kéo một thư mục. Sau một thời gian rất dài và học hỏi nhiều hơn bao giờ tôi muốn biết về Win32/COM (và một cú hích từ một người rất hữu ích ở đây), cuối cùng tôi đã tạo ra IStream
hoặc IStorage
.
Sau đó, tôi thấy rằng để vượt qua điều này IStream
hoặc IStorage
tắt đến Windows Explorer, tôi đã nhận được nó trong một STGMEDIUM
. Tất nhiên, medium.tymed sẽ là IStream
hoặc IStorage
, tùy thuộc vào việc tôi đang sử dụng, nhưng khi tôi hiểu nó, medium.unionmember
phải là một con trỏ đến số IStream/IStorage
.
Tôi đã thử sử dụng từ khóa cố định (nhưng không phải blittable, dĩ nhiên), tôi đã thử chỉ chuyển đổi điều đã thổi thành mảng byte, nhưng không thể tìm ra cách để thực hiện điều đó, Tôi đã thử sử dụng GCHandle để ghim nó (nhưng nó vẫn không phải là blittable), và một số những thứ khác mà không hoạt động. Vì vậy, câu hỏi của tôi là: Given IStorage s
và STGMEDIUM m
, làm thế nào để tôi điền m.unionmember
để Windows Explorer sẽ được hạnh phúc và chấp nhận thả?
nếu có ai biết về việc triển khai IStream/IStorage hoàn chỉnh cho URL http, vui lòng đăng câu trả lời khác tại đây, có rất ít kết quả về google cho vấn đề này. –
http://stackoverflow.com/questions/3168145/download-a-file-using-windows-istream –