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

Posted

技术标签:

【中文标题】从传递回完整对象模型的非托管 C++ 调用 C# 方法【英文标题】:Calling C# method from unmanaged C++ which passes back a full object model 【发布时间】:2012-02-21 16:11:24 【问题描述】:

我在 C# 中有类似于以下内容的内容:

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

    public class ClassB
    
        int SomeOtherId get;set;
    

我想将此对象模型传递给非托管 C++。 IE。从非托管 C++ 代码调用,例如 'GetClassA() : ClassA'。

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

我的问题是:

    如何将 ClassA 里面的 ClassB 数组传回? 到目前为止,我只能从 C# 传回结构。我上面的例子是我真正想要传回的类。 IE。对数据的引用。

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

【问题讨论】:

【参考方案1】:

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

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

    使用 C++/CLI。 从 C# 类中创建 COM 对象。

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

【讨论】:

我知道您不能真正调用 C# 方法,但您可以使用 COM 调用 .net 代码,这是相同的概念。我很高兴从我的 C# 类中创建 COM 对象,但我可以保持我原来帖子中提到的相同结构吗?谢谢。

以上是关于从传递回完整对象模型的非托管 C++ 调用 C# 方法的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 和非托管 C++ 之间传递自定义对象

调用使用 C# 返回结构数组的非托管 dll 函数

如何从 C# 中的非托管内存中读取数据?

从非托管 c++ 调用 C# 函数(通过托管包装器)

c# - 如何调用分配输出缓冲区以在c#中返回数据的非托管c++函数?

如何添加对由 C# 项目调用的非托管 C++ 项目的引用?