P/调用纯 C++图书馆?
是否可以 P/Invoke 纯 C++ 库,还是必须将其包装在 C 中?
Is it possible to P/Invoke a pure C++ library, or does it have to be wrapped in C?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
是否可以 P/Invoke 纯 C++ 库,还是必须将其包装在 C 中?
Is it possible to P/Invoke a pure C++ library, or does it have to be wrapped in C?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
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).
“纯”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.