gpt4 book ai didi

c# - 使用 IStorage/IStream 从 C# 拖放到 Windows 资源管理器

转载 作者:太空狗 更新时间:2023-10-29 23:42:40 32 4
gpt4 key购买 nike

我已经在听起来很简单的功能上工作了太久了。我的想法是我有一个带有 TreeView 的应用程序。此 TreeView 表示组织成文件和文件夹的数据库内容,很像 Windows 资源管理器。因此,用户应该能够将这些文件/文件夹从我的应用程序拖到 Windows 资源管理器中是有道理的。

我决定,如果他们拖动文件,我应该使用 IStream,如果他们拖动文件夹,我应该使用 IStorage。经过很长时间的学习,我对 Win32/COM 的了解比我想知道的要多(以及这里一位非常乐于助人的人的插入),我终于有了 IStreamIStorage已创建。

然后我发现要将此 IStreamIStorage 传递给 Windows Explorer,我必须将其放入 STGMEDIUM 中。当然,medium.tymed 将是 IStreamIStorage,具体取决于我使用的是哪个,但据我了解,medium.unionmember 必须是指向 IStream/IStorage 的指针。

我试过使用 fixed 关键字(但它当然不是 blittable 的),我试过只是将爆炸的东西转换为字节数组,但无法想出一种方法来实现它,我我尝试使用 GCHandle 来固定它(但它仍然不可 blittable),以及其他一些不起作用的东西。

所以我的问题是:给定 IStorage sSTGMEDIUM m,我如何填充 m.unionmember 以便 Windows Explorer高兴并接受掉落?

最佳答案

通常,C 联合使用 StructLayout.Explicit 表示在 C# 中。然而,这可能不适用于您的情况 - 虽然您可以覆盖 IStreamIStorage像那样的引用,编码器将尝试编码两者。您最好的选择可能是将该字段声明为 IntPtr在你的声明中 STGMEDIUM ,并使用 Marshal.GetIUnknownForObject对其进行初始化。

关于c# - 使用 IStorage/IStream 从 C# 拖放到 Windows 资源管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1280240/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com