P/调用纯 C++图书馆?

发布于 2024-08-23 06:33:11 字数 43 浏览 8 评论 0原文

是否可以 P/Invoke 纯 C++ 库,还是必须将其包装在 C 中?

Is it possible to P/Invoke a pure C++ library, or does it have to be wrapped in C?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(2

初雪 2024-08-30 06:33:11

C++ 库可以 P/调用,但您需要使用“depends”来查找损坏的方法名称(名称如“@0!classname@classname@zz”),例如方法在p/invoke 并将实例的引用作为第一个参数传递(您可以将构造函数的结果存储在 IntPtr 中)。

C++ libraries can be P/invoked, but you'll need to use "depends" to find the mangled method names (names like "@0!classname@classname@zz") and for instance methods use "ThisCall" calling convention in the p/invoke and pass the reference of the instance as the first argument (you can store the result of the constructor within an IntPtr).

梦巷 2024-08-30 06:33:11

“纯”C++ 库的名称会被编译器修改,因此很难获得正确的 P/Invoke 声明。
C 方法开头有一个下划线,而 C++ 中可能没有下划线。
C++ 方法需要 this 实例作为第一个参数,您必须自己提供它。

我认为您需要将 C++ API 包装在一系列与 C 兼容的方法中。

A "pure" C++ library will have its name mangled by the compiler, so it will be hard to get the P/Invoke declaration correct.
And a C method gets an underscore at the beginning, which may not be there in C++.
And a C++ method needs a this instance as a first parameter, you'd have to give it yourself.

I think that you need to wrap your C++ API in a C-compatible series of methods.

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