Простой способ, предполагающий класс Foo:
- Создайте проект C ++ / CLI, назовите его FooWrapper.
- Заставьте FooWrapper зависеть от неуправляемой dll (как вы обычно это делаете).
- Создайте управляемый класс ManagedFoo, который содержит одно поле частного экземпляра типа Foo *.
- предоставляет общедоступные функции переноса в ManagedFoo, которые пересылаются в базовое поле экземпляра.
- Опционально (хотя и рекомендуется):
- преобразование параметров из .net идиом (строк и т.п.) в идиомы C ++ (std :: string или char *)
- ловит неуправляемые исключения и вместо них выбрасывает управляемые
Затем вы делаете свой код c # зависимым от проекта / dll FooWrapper и гарантируете, что неуправляемая dll правильно развернута с ним, как это делается, зависит от неуправляемой dll, но в том же каталоге обычно достаточно.
Если функции не зависят от экземпляров класса, тогда еще проще использовать P / Invoke