从非托管C++调用C#方法,该方法传递回一个完整的对象模型

Calling C# method from unmanaged C++ which passes back a full object model

本文关键字:方法 一个 对象模型 C++ 调用      更新时间:2023-10-16

我在C#中有类似的东西:

    public class ClassA
    {
        int Id  { get; set; }
        ClassB[] ClassBItems  { get; set; }    
    }  

    public class ClassB
    {
        int SomeOtherId {get;set;}
    }

我想把这个对象模型传递到非托管C++中。例如,从非托管C++代码(如"GetClassA():ClassA")进行调用。

到目前为止,我已经成功地将单个对象或对象数组从托管C#传递到非托管C++(使用COM/CCW),但还没有传递其中包含ClassB的ClassA

我的问题是:

  1. 我怎样才能把里面有一个ClassB数组的ClassA传回来
  2. 到目前为止,我只能从C#返回结构。我上面的例子是我真正想传回去的课程。即对数据的引用

为了澄清,非托管代码将调用托管代码。

你真的不能直接这么做。您不能从本机C++调用C#方法,反之亦然。如果你传递了一些东西,它总是一个简单的struct,没有任何方法。

但有一些方法可以解决这个问题:

  1. 使用C++/CLI
  2. 从C#类中生成COM对象

如果您不想这样做,可以尝试通过向非托管代码传递回调或类似的方法来实现。但我认为这会相对困难和混乱。