Функция 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 неудачи.
