Автооборачивать С++ dll в С#

Я хочу использовать библиотеку С++ в проекте С#. Есть ли инструмент-оболочка для автоматического импорта всех классов?


person Baran    schedule 21.02.2011    source источник


Ответы (3)


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

Альтернативой, которая требует больше ручного кодирования, является C++/CLI.

Для чистого c apis я предпочитаю p/invoke любому из них. Есть программа для автоматизации преобразования заголовков c. Если я правильно помню, это называется что-то вроде «P/Invoke Interop Assistant» или «Interop Signature Toolkit».

Существует также mono/cxxi, который выглядит довольно круто.

person CodesInChaos    schedule 21.02.2011
comment
+1 за первый ответ, который действительно отвечает на вопрос ОП. - person Nordic Mainframe; 21.02.2011

Процедура использования собственных .dll в .Net называется P/Invoke. Посмотрите несколько примеров на http://pinvoke.net/.

Обратите внимание, что вы должны сопоставить цель сборки с версией .dll. Итак, для x86 .dll вам нужно заблокировать проект на x86, то же самое с x64.

Обратите внимание2, что вам нужно заблокировать только исполняемый проект (.EXE), а не какие-либо дополнительные проекты, загруженные из .EXE. .Net будет автоматически сопоставлять .Net .dll с типом цели ЦП, если для них задано значение ЛЮБОЙ.

С http://social.msdn.microsoft.com/forums/en-US/clr/thread/c957959e-0f0c-422e-a5be-4ccfdd12e63d: вы можете использовать «dumpbin /exports» или обходчик зависимостей (depends.exe) для просмотра экспортированные символы. Оба они включены в Visual Studio.

person Tedd Hansen    schedule 21.02.2011

Если это неуправляемый код, вы можете использовать P/Invoke. Другая возможность — использовать расширения C++/CLI для компиляции кода в управляемую сборку, которую можно использовать напрямую.

person Darin Dimitrov    schedule 21.02.2011
comment
Я хочу использовать эту библиотеку code.google.com/p/asmlibrary. сборка? Если нет, то как я могу это сделать? - person Baran; 21.02.2011
comment
Похоже на неуправляемый код. Таким образом, вы можете объявить управляемые оболочки для функций, которые хотите вызывать, используя DllImport. - person Darin Dimitrov; 21.02.2011