Существует ли инструмент, который генерирует подписи P / Invoke для произвольной неуправляемой DLL? - PullRequest
32 голосов
/ 12 июня 2011

Я наткнулся на инструмент, который генерирует подписи P / Invoke для собственных неуправляемых DLL-библиотек Microsoft: PInvoke Interop Assistant

Существует ли аналогичный инструмент, который будет генерировать подписи P / Invoke для третьей -сторонние неуправляемые библиотеки DLL?

Альтернативно, любой способ передачи сторонней библиотеки DLL в PInvoke Interop Assistant

РЕДАКТИРОВАТЬ: Актуальная проблема Я пытаюсьразрешить

Ответы [ 6 ]

44 голосов
/ 12 июня 2011

Google быстро обнаружил http://www.pinvoker.com/ (Совместимость указана как VS2005, 2008 и 2010; похоже, она не была обновлена ​​для работы с более новыми версиями)

Компилятор Microsoft C ++ / CLI также может сделать это, если вы используете /clr:safe и #include заголовочный файл, он сгенерирует код p / invoke, который вы можете извлечь с помощью, например ILSpy (бесплатно) или Red Gate Reflector (раньше был бесплатным).

13 голосов
/ 09 ноября 2014

Я использую PInvoke Interop Assistant для неуправляемых библиотек DLL, используя третью вкладку в пользовательском интерфейсе, помеченную «SigImp Translate Snippet». Просто скопируйте и вставьте свой заголовок в окно «Фрагмент исходного кода» и нажмите «Создать» (или включите «Автогенерация»). В качестве иллюстрации вот код из моего вопроса . Обратите внимание, что по какой-то причине ошибки отображаются не на панели «Ошибки», а в виде комментариев вверху сгенерированного кода.

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

enter image description here

9 голосов
/ 17 ноября 2015

Этот проект активен и выглядит многообещающе для задачи: https://github.com/mono/CppSharp

3 голосов
/ 05 марта 2019

Другой альтернативой является SharpGenTools . Он используется SharpDX для «автоматического» создания привязок API DirectX.

3 голосов
/ 22 сентября 2016

Вы можете создать оболочку C # для любой собственной DLL, включая функции экспорта DLL C-стиля и классы экспорта DLL C ++, используя xInterop C ++ .NET Bridge с .NET в собственный C ++ Bridge . Он доступен для бесплатной оценки с некоторыми ограничениями.

Отказ от ответственности: я являюсь автором xInterop C ++ .NET Bridge .

0 голосов
/ 12 июня 2011

Используйте Dumpbin.exe, поставляемый с VS SDK, Dumpbin , вам все равно нужно будет вручную писать подписи пинвока на основе данных

...