【问题标题】:Marshal a C++ class to C#将 C++ 类编组为 C#
【发布时间】:2010-04-21 17:18:39
【问题描述】:

我需要在一些 C# 代码中访问本机 C++ DLL 中的代码,但在弄清楚编组时遇到问题。我之前使用纯 C 代码完成了此操作,但似乎发现使用 C++ 类无法直接实现。由于许多类包含虚函数或内联函数,这一事实变得更加复杂。我什至尝试通过PInvoke Interop Assistant 传递标头,但它会阻塞几乎所有内容,而不是真的无所事事......我猜是因为它并不真正受支持。

那么,如果可能的话,如何从 .NET 代码中使用本机 C++ 类 DLL。 如果我必须使用一些中介(CLR C++?),那很好。

【问题讨论】:

    标签: c# .net c++ interop


    【解决方案1】:

    在 C# 中确实没有简单的方法可以做到这一点 - 我建议在 C++/CLI 中创建一个简单的包装层,将 C++ 类公开为 .NET 类。

    It is possible to use P/Invoke and lots of cleverness to call C++ virtual methods,但除非你真的别无选择,否则我不会走这条路。

    【讨论】:

    • 很好的答案。比严格解决问题(“如何编组......?”)更好的是解决 OP 的实际需要
    【解决方案2】:

    您可以看看SWIG,如果没有别的,只是为了看看他们如何处理基本的包装器代码(由 SWIG 生成)。我对 C# 本机代码绑定几乎一无所知,因此我无法判断他们的方法是否合理,但他们在其他一些语言绑定方面做得不错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      相关资源
      最近更新 更多