У меня есть клиентское приложение в нативном коде 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, но я бы предпочел этого не делать. Есть ли способ обойти это?