【问题标题】:C# pass struct with interface to unmanaged C++C# 将带有接口的结构传递给非托管 C++
【发布时间】:2021-12-29 03:16:07
【问题描述】:

我有一个非托管 C++ DLL 和一些使用 [dllimport] 访问它的 C# 代码。我有一个从接口派生的结构(比如 Dog:Animal),在 C++ 端,我有一个从抽象类派生的类(比如 Dog:public Animal)。我想要一个 C++ 函数,它以某种方式将 Animal 作为参数,这样我就可以从 C# 传递 Dog(因为你不能在 C++ 中使用抽象类作为参数)。

【问题讨论】:

    标签: c# c++


    【解决方案1】:

    一种选择是使用 c++/cli 来定义您的对象模型。这将使 c# 和 c++/cli 代码都可以使用它。

    P/invoke 本质上与 C 一样进行方法调用。这意味着它们在不同语言之间高度兼容,但也意味着它们不支持诸如多态之类的东西。

    结构本质上只是 C# 和 C 中的一大块数据,您只需要确保布局相同。但是一旦你开始涉及继承,事情就会变得更加复杂,因为 c# 和 c++ 以完全不同的方式表示对象。

    也就是说,您仍然可以创建一个 c++ 方法,该方法从 c# 获取狗结构并将其转换为等效的 c++ 类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多