我正在编写一个 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时出现违规访问”的错误。请问有人可以提供建议吗?
编辑: 原帖作者(在下面某个答案的评论中)报告说,在这种情况下:
“错误是由于调用DLL中的函数需要其他DLL存在。”
int WINAPI(char*)
和int(char*)
不是同一件事。你的函数至少应该被声明为int WINAPI GetInfo(char*)
。 - Emilio Garavaglia