Доступ к источнику библиотеки C ++
Самый простой способ - использовать C ++ Interop для создания оболочки как сборки в смешанном режиме.Это позволяет использовать прагмы, управляемые и неуправляемые, для переключения между собственным и управляемым кодом.Таким образом, вы можете красиво обернуть ваш класс C ++ управляемой оболочкой C ++ и вызывать его из (конечно) управляемого C #.
Имейте в виду, что это не будет работать в Mono.
У вас нет доступа к исходному тексту библиотеки C ++, но вы немного знаете C ++?
Вы можете написать небольшую управляемую оболочку в управляемом C ++ для вызова неуправляемой библиотеки C ++ из-зауникальной способности C ++ вызывать COM изначально.
Это делается с помощью пользовательских оболочек, вызываемых во время выполнения, или CRCW .Затем вы можете вызвать управляемую оболочку прямо из C #, используя собственные типы .Net и все.
Преимущества этого (как указано в MSDN):
Код взаимодействиявстроен в приложение, поэтому нет зависимости от отдельной сборки.Кроме того, открытый управляемый интерфейс настроен так, чтобы быть более похожим на .NET.Например, метод RenderFile принимает System.String вместо char *.Управляемая версия интерфейса COM называется Custom Runtime Callable Wrapper (CRCW).
У вас нет доступа к источнику библиотеки C ++ и вы не знаете C ++?
Тогда вы застряли с C ++ COM Interop , что немного более грязно.Вам нужно будет создать оболочку, используя Tlbimp.exe .
Это грязно, потому что:
- Типы, которые не имеют прямого соответствия в управляемом кодепредоставляются как типы указателей IntPtr (довольно сложно обрабатывать в C #)
- Получающиеся сборки будут очень большими, поскольку создаются интерфейсы для всего в библиотеке (а не только того, что вам нужно).
- Вам придется развернуть дополнительную сборку с вашим приложением и управлять версиями и т. Д. *