Функция 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. Есть несколько вероятных сценарии:

  1. нет экспорт функция с именем GetNumber
  2. существует экспортированная функция с именем GetNumber, но он не отмечен extern "c", в результате имя коверкая.
  3. hDLL не является допустимым дескриптором библиотеки.

если это окажется #1 выше, вам нужно экспортировать функции, украсив декларацию __declspec(dllexport) как это:

MyFile.h

__declspec(dllexport) int GetNumber();

если это окажется #2 выше, вам нужно сделать это:

extern "C"
{
  __declspec(dllexport) int GetNumber();
};

скорее всего LoadLibrary() не удалось. Вы просто не можете этого видеть, потому что, по-видимому, вы не проверяете, что он возвращает:

при сбое функции возвращаемое значение равно NULL. Чтобы получить расширенную информацию об ошибке, вызовите GetLastError.

EDIT:

мы не знаем, как вы экспортируете функцию в DLL-код, но этой теме объясняет несколько причин, почему GetProcAddress неудачи.


вы можете проверить, если ваш GetNumber функция экспортируется как