我一直在研究听起来很简单的功能太久了。这个想法是我有一个带有 TreeView 的应用程序。此树视图表示组织成文件和文件夹的数据库的内容,与 Windows 资源管理器非常相似。因此,用户应该能够将这些文件/文件夹从我的应用程序中拖到 Windows 资源管理器中,这是有道理的。
IStream
我决定如果他们拖动文件或如果他们拖动文件夹,我应该使用IStorage
。经过很长一段时间和比我想知道的更多关于 Win32/COM 的学习方式(以及这里一位非常有帮助的人的推动),我终于有了它IStream
或IStorage
创建了它。
然后我发现要将它传递IStream
或IStorage
关闭到 Windows 资源管理器,我必须将它放在一个STGMEDIUM
. 当然, medium.tymed 将是IStream
or IStorage
,这取决于我使用的是哪个,但据我了解,它medium.unionmember
必须是指向IStream/IStorage
.
我尝试过使用 fixed 关键字(但它当然不是 blittable),我尝试过将爆炸的东西转换为字节数组,但无法想出一种方法来实现这一点,我试过了使用 GCHandle 固定它(但它仍然不是 blittable),以及其他一些不起作用的东西。
所以我的问题是:给定IStorage s
and STGMEDIUM m
,我如何填充m.unionmember
以便 Windows 资源管理器会高兴并接受丢弃?