将 C# 托管结构/类与 Windows API 结合使用
我厌倦了使用 Marshal.Copy
、Marshal.Read*
和 Marshal.Write*
所以我想知道是否有办法强制非托管内存指针(IntPtr
类型)的转换。
像这样的事情:
IntPtr pointer = Marshal.AllocateHGlobal(sizeof(Foo));
Foo bar = (Foo)pointer;
bar.fooBar = someValue;
// call some API
Marshal.FreeHGlobal(pointer);
bar = null; // would be necessary?
I'm sick of using Marshal.Copy
, Marshal.Read*
and Marshal.Write*
so I was wondering if there's a way to force casting of an unmanaged memory pointer (of type IntPtr
).
Something like this:
IntPtr pointer = Marshal.AllocateHGlobal(sizeof(Foo));
Foo bar = (Foo)pointer;
bar.fooBar = someValue;
// call some API
Marshal.FreeHGlobal(pointer);
bar = null; // would be necessary?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我相信您正在寻找 Marshal.PtrToStructure 和 Marshal.StructureToPtr。那里的示例代码演示了用法:
I believe you're after Marshal.PtrToStructure and Marshal.StructureToPtr. The sample code there demonstrates the use: