【发布时间】:2020-05-12 07:46:21
【问题描述】:
我正在学习 PInvoke 以在 C# 中使用 C++ 库(带有 C 样式接口)。在阅读文档并搜索 Google/StackOverflow 以获取更多信息后,我想知道本机库和 .Net 的二进制兼容性。我想我不久前在某个地方读过一些东西,但我再也找不到了。我在这方面找不到任何其他内容。
当我编译 C/C++ 以在 .Net 中使用时,是否需要使用某些配置(如编译器标志)使其与 PInvoke 兼容?我是否可以在一个 .Net 项目中使用由不同编译器创建的本地库,前提是这些库不相互依赖?
关于 .Net PInvoke 的 C/C++ 编译,我还有什么需要了解的吗?
我想在 CMake 项目中使用 GCC 和 CLang 来创建原生库。
【问题讨论】:
-
P/Invoke 有很多适配能力。但是,它与 C/C++ ABI 不是二进制兼容的,但如果 P/Invoke 可以使用一段 C/C++ 代码,则它不依赖于 C/C++ 编译器(MSVC 或其他)。或者尝试完善您的问题。
-
@SimonMourier 感谢您的回复。我无法细化这个问题,因为我没有更多细节。我根本找不到任何文档、教程或帖子来说明是否存在对本机库的任何依赖项(C 接口除外)。
-
注意 P/Invoke 也是跨平台的(使用 .NET Core):docs.microsoft.com/en-us/dotnet/standard/native-interop/pinvoke。同样,这并不意味着它可以使用任何 C++ 构造,但它将所有 C++ 编译器视为平等公民
-
好的。如果您将您的 cmets 放入答案中,我会将此主题标记为已回答。
标签: c# c++ .net .net-core pinvoke