Как проверить, существует ли точка входа DLL в C # без вызова функции - PullRequest
9 голосов
/ 03 июля 2011

Я использую OpenTK OpenGL обертку.Так как он загружает OpenGL dll (или .so в Linux), он содержит много импортированных функций DLL.

Проблема в том, что некоторые драйверы не экспортируют все функции.Есть ли способ проверить, существует ли точка входа?Мне нужно сделать это, так как на самом деле вызов функции в системах, в которых она есть, вызовет сбой, если не будет выполнено в правильной последовательности.Поэтому перехват исключения EntryPointNotFound в моем случае не работает.

1 Ответ

10 голосов
/ 03 июля 2011

Вы можете P / Invoke вызывать LoadLibrary и GetProcAddress из Win32:

[DllImport("kernel32", SetLastError=true)]
static extern IntPtr LoadLibrary(string lpFileName);

[DllImport("kernel32", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=true)]
static extern UIntPtr GetProcAddress(IntPtr hModule, string procName);

Используйте LoadLibrary, чтобы загрузить модуль и получить дескриптор, и GetProcAddress, чтобы получить указатель функции на точку входа.Если последний возвращает ошибку, точка входа не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...