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

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

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

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

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

7 ответов

Решение

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

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

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

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

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

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

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

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

Я использую инструмент с открытым исходным кодом ClangSharp .Это приложение командной строки, которое имеет множество настроек для настройки вывода. Windows и Linux поддерживаются.

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

Другие вопросы по тегам