Функция GetProcAddress в C++
Привет, ребята: я загрузил свою DLL в свой проект, но всякий раз, когда я использую функцию GetProcAddress. он возвращает NULL! что мне делать? Я использую эту функцию (double GetNumber (double x) ) в "MYDLL.DLL-файл"
вот код, который я использую:
typedef double (*LPGETNUMBER)(double Nbr);
HINSTANCE hDLL = NULL;
LPGETNUMBER lpGetNumber;
hDLL = LoadLibrary(L"MYDLL.DLL");
lpGetNumber = (LPGETNUMBER)GetProcAddress((HMODULE)hDLL, "GetNumber");
3 ответов
проверка кодов возврата и вызова GetLastError()
освободит вас. Вы должны проверять коды возврата дважды. Вы на самом деле проверяете коды возврата нулевое время.
hDLL = LoadLibrary(L"MYDLL.DLL");
Регистрация hDLL
. Это NULL? Если да, звоните GetLastError()
чтобы выяснить, почему. Это может быть так же просто, как"файл не найден".
lpGetNumber = (LPGETNUMBER)GetProcAddress((HMODULE)hDLL, "GetNumber");
если lpGetNumber
равно NULL, call GetLastError()
. Он расскажет вам, почему не удалось найти адрес proc. Есть несколько вероятных сценарии:
- нет экспорт функция с именем
GetNumber
- существует экспортированная функция с именем
GetNumber
, но он не отмеченextern "c"
, в результате имя коверкая. -
hDLL
не является допустимым дескриптором библиотеки.
если это окажется #1 выше, вам нужно экспортировать функции, украсив декларацию __declspec(dllexport)
как это:
MyFile.h
__declspec(dllexport) int GetNumber();
если это окажется #2 выше, вам нужно сделать это:
extern "C"
{
__declspec(dllexport) int GetNumber();
};
скорее всего LoadLibrary()
не удалось. Вы просто не можете этого видеть, потому что, по-видимому, вы не проверяете, что он возвращает:
при сбое функции возвращаемое значение равно NULL. Чтобы получить расширенную информацию об ошибке, вызовите GetLastError.
EDIT:
мы не знаем, как вы экспортируете функцию в DLL-код, но этой теме объясняет несколько причин, почему GetProcAddress неудачи.