【问题标题】:Dllimport/PInvoke binary compatibilityDllimport/PInvoke 二进制兼容性
【发布时间】: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


【解决方案1】:

P/Invoke 有很多适配能力。 P/Invoke 也是 cross platform(使用 .NET Core)。

但是,它与 C/C++ 二进制不兼容,但是如果 P/Invoke 可以使用一段 C/C++ 代码,则它不依赖于 C/C++ 编译器(MSVC 或其他),或者说在另一个这样,它将无法使用任何 C++ 构造,但它将所有 C++ 编译器视为平等公民

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-11
    • 2011-08-03
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多