2009-05-18 1 views
1

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

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

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

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

+0

Не можете ли вы передать функциональные точки/события или делегаты от C# до C++. Я знаю, что для некоторых продвинутых таймеров вы можете легко обрабатывать события C++ из C#. – CodingBarfield

+1

Я знаю, что это старый пост, но см. Http://stackoverflow.com/questions/13293888/how-to-call-ac-sharp-library-from-native-c-using-c-cli-and-ijw более подробно об использовании библиотек C# в неконтролируемом коде через C++/CLI Wrapper. – amalgamate

ответ

2

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

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

+0

Это именно то, что я делаю - обертывание кода C++ в классы ref для C# dll для их использования. Но мост также должен переадресовывать вызовы с клиента C++ в C# dll. Для этого мост должен использовать некоторый код C# dll, таким образом, зависимость. Я не вижу, как это можно устранить. Упускаю ли я что-то совершенно очевидное? – 2009-05-19 06:31:17

Смежные вопросы