Обертки классов
Вы можете написать класс оболочки для DLL. Это довольно популярно. Сторонние поставщики библиотек обычно предоставляют такие оболочки .NET-сборок, которые обертывают их DLL API (написано на C ++, C и т. Д.)
В вашем классе оболочки просто DllImport
все функции API в библиотеке DLL. Затем вы можете использовать эти функции, как и любой метод класса .NET.
Однако на практике вам иногда приходится писать собственные .NET-совместимые методы, которые вызывают эти импортированные функции, из-за сопоставления типов аргументов и других проверок, которые вы захотите предоставить.
Также рассмотрите возможность предоставления удобных перегруженных методов, поскольку CLR поддерживает их, а не все неуправляемые библиотеки.
COM Interop
Или, если эта неуправляемая DLL является COM-модулем, и вы просто хотите использовать ее как есть, и если вы используете Visual Studio, вы можете просто «добавить ссылку» на нее, и Visual Studio автоматически создаст класс-оболочку Interop для вас.
Импорт библиотеки типов
Если ваша неуправляемая DLL не является COM-модулем, но вы все равно хотите, чтобы она автоматически конвертировалась в CLR-совместимую сборку (без необходимости писать класс-оболочку), вы должны документировать все функции API в файле IDL. Обычно, если ваша библиотека представляет собой C ++ или C DLL, у них будут заголовочные файлы в исходном формате C ++ / C, которые можно легко преобразовать в файл IDL (который использует синтаксис C). Затем используйте midl
, чтобы создать библиотеку типов для этой библиотеки DLL. Затем вы можете преобразовать эту библиотеку типов в сборку .NET с помощью tlbimp
.