Подтвердить что ты не робот

Есть ли инструмент, который генерирует сигнатуры P/Invoke для произвольной неуправляемой DLL?

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

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

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

ОБНОВЛЕНИЕ: Актуальная проблема Я пытаюсь решить

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

enter image description here

Ответ 4

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

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

Ответ 5

Другой альтернативой является SharpGenTools. Он используется SharpDX для "автоматического" создания привязок API DirectX. Также есть CppSharp, он используется QtSharp для генерации привязок к нативным библиотекам C++/C. До сих пор CppSharp совместим только с .Net Framework 6+.

Ответ 6

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