我正在编写一个MFC项目,尝试在DLL中调用一个函数,该函数将以字符串形式返回一些信息。 DLL中的功能如下:

int GetInfo(char* Info)

如果成功,该函数将返回0。信息将在string参数中返回。调用例程如下:
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”错误。有人可以建议吗?

最佳答案

您试图写入(或取消引用)NULL指针。当您在调用代码中检查所有可能的NULL时,错误很可能是在您的调用代码中。

如果您检查了您的被调用代码,但在那也找不到空引用异常的原因,请考虑您可能错过了正确匹配调用约定的地方。函数指针的类型应该与库中的类型完全相同:

对于int GetInfo(char* Info),typedef应该为typedef int (*FUNC1)(char* szInfo);

10-08 00:44