P/Invoke & 中是否有用于编组的匹配类型表?互操作?
我几乎被 .NET 世界和本机世界之间的不同类型方言的匹配方式所困扰。比如MFC CList之类的东东。
我非常希望这样:
- 某种表格或清单,列出了 .NET 世界类型和本机世界类型之间的所有映射。
- 列出所有可封送的类型的表。
非常感谢!
I am almost buried by how the different dialects of types are matched between .NET world and native world. Such as MFC CList and other stuffs.
I am desperately hoping for this:
- Some kind of table or cheetsheet that lists all the mappings between types of .NET world and native world.
- A table that lists all the types that can be marshaled.
Great thanks!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
有关默认类型转换的信息,请尝试此图表 出来。
有关 Marhsaling 的一般信息,请查看此页面< /a> 出来。
For information on default type conversion, try this chart out.
For information on Marhsaling in general, check this page out.
UnmanagedType
enum 给出了您想要的目标类型的相当完整的列表。它至少涵盖了 C 中可用的所有核心类型。对于 C 中的用户定义类型,您需要检查它们是否是标准类型的 typedef,或者对于结构,您需要在 C# 中重写结构并手动封送它的每个字段。此处不涉及 C++ 类(例如 MFC)。 P/Invoke 不支持
__thiscall
调用约定(即类方法)。将 C++ 代码导入到 C# 的常见方案是使用 C++/CLI 为类编写 COM 包装器,或者从 C++ 编写基于 C 的包装器(标记代码 extern "C"),然后在包装器上使用 P/Invoke 。The
UnmanagedType
enum gives a pretty complete list of the target types you want. It covers all the core types available in C atleast. For user defined types in C, you'll need to check if they are typedefs of a standard type, or in the case of structures, you need to rewrite the structure in C# and marshal each field of it manually.C++ classes (such as MFC) aren't covered here. P/Invoke does not support the
__thiscall
calling convention (ie, class methods). The common scenarios on importing C++ code to C# are to write a COM wrapper for the class using C++/CLI, or to write a C based wrapper from C++ (mark code extern "C"), and then use P/Invoke on the wrapper.