我一直工作在像这样简单的功能太长现在什么声音。这个想法是,我有一个TreeView的应用程序。此树视图代表组织为文件和文件夹,就像Windows资源管理器的数据库的内容。因此,它是有道理的,用户应该能够将这些文件/文件夹了我的应用程序和Windows资源管理器。

我决定,如果他们拖动文件或IStream如果他们拖动一个文件夹我应该使用IStorage。经过很长的时间和学习比我想知道的Win32 / COM(从这里一个非常有用的人轻推)的方式多了,我终于有IStreamIStorage创建。

然后我发现,通过这个IStreamIStorage关闭Windows资源管理器,我必须得到它在STGMEDIUM。当然,medium.tymed将或者IStreamIStorage,这取决于哪个我正在使用,但据我所知的medium.unionmember必须是一个指针IStream/IStorage

我一直使用固定的关键字(但不是blittable,当然),我试过只是诅咒的东西转换成字节数组试过,但不能想出一个办法做到这一点,我“VE使用的GCHandle管脚它(但它仍然是不blittable),和几个没有工作其他东西试过。

所以我的问题是这样的:鉴于IStorage sSTGMEDIUM m,我怎么填充m.unionmember使Windows资源管理器会很乐意接受的下降。

有帮助吗?

解决方案

通常,C工会使用C#StructLayout.Explicit表示。这可能不会工作你的情况,不过 - 虽然你可以叠加像IStreamIStorage参考,编组会尽量集中安排。你最好的选择可能是刚刚宣布在IntPtr声明领域为STGMEDIUM,并使用Marshal.GetIUnknownForObject进行初始化。

其他提示

我觉得题目是早已过时的,但是任何人寻找一个文件拖放看看这个讨论,尤其是dbirdz职位:的 http://www.daniweb.com/forums/thread166429.html

在我眼里,这将甚至适用于本申请,我会尝试我流写入然后可以移动其位置的临时文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top