Соединение кода на c ++ и c # с помощью моста c ++ / cli - PullRequest
1 голос
/ 18 мая 2009

У меня есть клиентское приложение в нативном коде c ++, использующее нативные библиотеки c ++. Я исследую возможность соединения этого кода с c # dll, поскольку их было бы намного проще написать. Я решил написать dll моста c ++ / cli, который можно загрузить с помощью LoadLibrary и который будет передавать вызовы в c # dll.

Связь между клиентом и dll такова, что клиент передает указатель на объект интерфейса, через который dll затем связывается с клиентом. Я обернул этот объект в код моста c ++ / cli для кода c #, чтобы использовать его.

Мост должен также предоставлять несколько функций с помощью __declspec (dllexport) и передавать эти вызовы в c # dll, поэтому ему нужно иметь указатель на интерфейс c #, к которому он их передает. Я хотел использовать объект c # с оболочкой gcroot <>, но проблема в том, что я получаю циклические зависимости между этими двумя библиотеками. C # dll должен ссылаться на dll моста, чтобы иметь возможность использовать класс-оболочку, а dll моста должен ссылаться на dll c #, чтобы использовать класс интерфейса.

Я знаю, что могу использовать COM вместо оборачивания объекта c # с помощью gcroot, но я бы предпочел этого не делать. Есть ли способ обойти это?

1 Ответ

2 голосов
/ 18 мая 2009

Просто определите интерфейс в C ++ / CLI вместо C #. Это полностью исключает зависимость от проекта C #.

Я рекомендую рассматривать проект C ++ / CLI как не что иное, как обертку - не определяйте там никаких новых интерфейсов. Просто возьмите то, что находится в текущем коде C ++, и оберните его в «ref-классы», чтобы вы могли создавать и вызывать их из C #.

...