Как использовать библиотеку классов C ++ в .net проекте - PullRequest
1 голос
/ 06 августа 2010

Мой проект .net должен использовать стороннюю библиотеку классов, написанную на C ++.Я уже пытался напрямую добавить ссылку на эту DLL из контекстного меню проекта «Добавить ссылку ...», но это не сработало, так как я предполагаю, что эта DLL не реализует объектную модель COM.

Чтоварианты у меня сейчас?Некоторые предлагают создать оболочку .net вокруг этой DLL, но я никогда не делал этого в прошлом, поэтому я ищу простое введение, возможно, с некоторыми примерами.Самым близким, что я делал в прошлом, был вызов методов из внешней библиотеки с использованием pInvoke (например, из win32.dll), но в этом случае мне также может понадобиться обернуть нативные типы C ++ в их эквивалентное представление в .net, а такжебыть некоторыми переменными экземпляра, которые нужно учитывать, поэтому я не знаю, будет ли pInvoke достаточным.

Я был бы очень признателен, если бы кто-то мог указать мне правильное направление, и, пожалуйста, дайте мне знать, если больше информациитребуется.

Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 06 августа 2010

Предполагается, что у вас нет источника для библиотеки, или есть другая причина, по которой вы не можете преобразовать библиотеку в сборку C ++ / CLI.

Вас может заинтересовать SWIG (http://www.swig.org/) генератор-обертка. Вы можете предоставить SWIG открытый интерфейс для библиотеки C ++, и она вяжет оболочку для любого из поддерживаемых им внутренних языков, одним из которых является C #.

2 голосов
/ 06 августа 2010

Мне известны 2 варианта

  1. P / Invoke , который является маршрутом DllImport
  2. Оболочка C ++ / CLI (здесьучебное пособие)
1 голос
/ 06 августа 2010

Как вы сказали, есть 2 способа сделать это:

1) Импортировать функции C ++ с использованием P / Invoke.

2) Обернуть неуправляемый код в управляемый и добавить эту библиотекуваше приложение .net с помощью «Добавить ссылку». Здесь является простым примером для этого.

Эта ссылка даст вам подробную информацию о совместимости .net.

Из этих P / Invokeэто самый простой способ сделать.Для эквивалентных типов c ++ в .net вы можете выполнить маршалинг, который также прост, и вы найдете много учебников по этому же.

...