Существует ли инструмент, который генерирует подписи 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 вручную из сброшенных данных.