P/Invoke & 中是否有用于编组的匹配类型表?互操作?

发布于 2024-09-14 11:09:10 字数 171 浏览 9 评论 0原文

我几乎被 .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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不交电费瞎发啥光 2024-09-21 11:09:11

有关默认类型转换的信息,请尝试此图表 出来。

有关 Marhsaling 的一般信息,请查看此页面< /a> 出来。

For information on default type conversion, try this chart out.

For information on Marhsaling in general, check this page out.

滥情哥ㄟ 2024-09-21 11:09:11

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文