Вызов метода C # из неуправляемого C ++, который возвращает полную объектную модель - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть что-то похожее на следующее в 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 Ответ

0 голосов
/ 21 февраля 2012

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

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

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

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

...