Вызов метода 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 внутри.
Мои вопросы:
- Как я могу передать обратно ClassA, который массив ClassB внутри него?
- До сих пор мне удавалось передавать только структуры из C#. Мои примеры выше - это классы, которые я бы хотел передать обратно. Т.е. ссылка на данные.
Чтобы уточнить, неуправляемый код будет вызывать управляемый код.
1 ответ
Вы не можете сделать это напрямую. Вы не можете вызывать методы C# из нативного C++ и наоборот. Если вы передаете что-то, это всегда просто C struct
без методов.
Но есть несколько способов обойти это:
- Используйте C++/CLI.
- Сделайте COM-объекты из ваших классов C#.
Если вы не хотите этого делать, вы можете попробовать сделать это, передав обратные вызовы неуправляемому коду или что-то в этом роде. Но я думаю, что это будет относительно сложно и грязно.