0xC0000005: место выполнения нарушения прав доступа 0x00000000

Я пишу проект MFC, который пытается вызвать функцию в DLL, которая будет возвращать некоторую информацию в строке. Функция в DLL выглядит следующим образом:

int GetInfo(char* Info)

Функция вернет 0 в случае успеха. Информация будет возвращена в строковом параметре. Процедура вызова выглядит следующим образом:

typedef int (WINAPI *FUNC1)(char* szInfo);HINSTANCE hinstLib;
FUNC1 GetInfo;
char szInfo[50];

hinstLib = LoadLibrary(TEXT("DevInfo.dll"));

// If the handle is valid, try to get the function address.
if (hinstLib != NULL)
{
GetInfo = (FUNC1) GetProcAddress(hinstLib, "GetInfo");

// If the function address is valid, call the function.
if (NULL != GetInfo)
{
if((GetInfo) (szInfo)) // Error here!!
{
AfxMessageBox(_T("Error Reading"));
}
}

FreeLibrary(hinstLib);
}

Этот код не имеет ошибки при компиляции и компоновке. При выполнении он выдаст ошибку «Расположение выполнения нарушения доступа 0x00000000» в указанном выше местоположении. Может кто-нибудь совет?

2

Решение

Вы пытались записать (или разыменовать) указатель NULL. Поскольку вы проверили все возможные значения NULL в своем вызывающем коде, скорее всего, ошибка в вызываемом коде.

Если вы проверили свой вызываемый код и там не можете найти причину исключения нулевой ссылки, подумайте, что вы, возможно, пропустили, чтобы правильно соответствовать соглашениям о вызовах. Тип указателя вашей функции должен быть точно таким же, как в вашей библиотеке:

За int GetInfo(char* Info) typedef должен быть typedef int (*FUNC1)(char* szInfo);

2

Другие решения

Также возможно, что в буфер записывается более 50 символов (szInfo):

char szInfo [50];

1

По вопросам рекламы [email protected]