Есть ли инструмент, который генерирует сигнатуры P/Invoke для произвольной неуправляемой DLL?
Я наткнулся на инструмент, который генерирует подписи P/Invoke для собственных неуправляемых библиотек Microsoft: PInvoke Interop Assistant
Существует ли аналогичный инструмент, который будет генерировать подписи P/Invoke для сторонних неуправляемых библиотек DLL?
Альтернативно, любой способ передать стороннюю DLL в PInvoke Interop Assistant
ОБНОВЛЕНИЕ: Актуальная проблема Я пытаюсь решить
Ответы
Ответ 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]()
Ответ 3
Этот проект активен и выглядит многообещающе для задачи: https://github.com/mono/CppSharp
Ответ 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, вам все равно придется записывать сигнатуры пинвокей вручную из сброшенных данных