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

发布于 2025-01-08 06:22:52 字数 575 浏览 1 评论 0原文

我在 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. 如何传回 ClassA 中的 ClassB 数组?
  2. 到目前为止,我只能从 C# 传回结构。我上面的例子是我实际上想传回的类。即对数据的引用。

澄清一下,非托管代码将调用托管代码。

I have something similar to the following in C#:

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

and

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

I want to pass this object model into unmanaged C++. I.e. Have a call from the unmanaged C++ code such as 'GetClassA() : ClassA'.

So far, I have managed to pass single objects or arrays of objects from managed C# to unmanaged C++ (using COM/CCW), but haven't been pass ClassA with ClassB inside it.

My questions are:

  1. How can I pass back ClassA which a ClassB array inside it?
  2. So far, I have only been able to pass back structs from C#. My examples above are classes which is what I'd actually like to pass back. I.e. a reference to the data.

To clarify, the unmanaged code will be calling the managed code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

£冰雨忧蓝° 2025-01-15 06:22:52

你实际上不能直接这样做。您无法从本机 C++ 调用 C# 方法,反之亦然。如果您传递某些内容,它始终只是一个简单的 C struct,没有方法。

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

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

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

You can't really do that directly. You can't call C# methods from native C++ and vice versa. If you pass something, it's always just a simple C struct, with no methods.

But there are some ways to work around that:

  1. Use C++/CLI.
  2. Make COM objects out of your C# classes.

If you don't want to do either, you could try doing it by passing callbacks to the unmanaged code, or something like that. But I think it would be relatively hard and messy.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文