Вызов метода C# из неуправляемого C++, который возвращает полную объектную модель

У меня есть что-то похожее на следующее в 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), но я не прошел ClassA с ClassB внутри.

Мои вопросы:

  1. Как я могу передать обратно ClassA, который массив ClassB внутри него?
  2. До сих пор мне удавалось передавать только структуры из C#. Мои примеры выше - это классы, которые я бы хотел передать обратно. Т.е. ссылка на данные.

Чтобы уточнить, неуправляемый код будет вызывать управляемый код.

1 ответ

Вы не можете сделать это напрямую. Вы не можете вызывать методы C# из нативного C++ и наоборот. Если вы передаете что-то, это всегда просто C structбез методов.

Но есть несколько способов обойти это:

  1. Используйте C++/CLI.
  2. Сделайте COM-объекты из ваших классов C#.

Если вы не хотите этого делать, вы можете попробовать сделать это, передав обратные вызовы неуправляемому коду или что-то в этом роде. Но я думаю, что это будет относительно сложно и грязно.

Другие вопросы по тегам