关于网友提出的“ DLL调用的的时候,编译通过,运行的时候提示内存不可读”问题疑问,本网通过在网上对“ DLL调用的的时候,编译通过,运行的时候提示内存不可读”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: DLL调用的的时候,编译通过,运行的时候提示内存不可读
描述:dll
这个的DLL的代码:
#include
#include
extern "C" _declspec(dllexport) VOID msgbox(char *szmsg);
VOID msgbox(char *szmsg)
{
char szMduleName[MAX_PATH]={0};
GetModuleFileName(NULL,szMduleName,MAX_PATH);
MessageBox(NULL,szmsg,szMduleName,MB_OK);
}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, void* lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
{
msgbox("DLL_PROCESS_ATTACH");
break;
}
case DLL_PROCESS_DETACH:
{
msgbox("DLL_PROCESS_DETACH");
break;
}
}
return true;
}
#include
typedef VOID (*PFUNMSG) (char *);
int main()
{
HMODULE hmodule=LoadLibrary("FirstDLL.dll");
if (hmodule=NULL)
{
MessageBox(NULL,"FirstDLL.dll不存在!","加载失败",MB_OK);
return -1;
}
PFUNMSG pfunmsg=(PFUNMSG)GetProcAddress(hmodule,"msgbox");
pfunmsg("hello first dll");
return 0;
}
这个是调用DLL的代码。
应该会弹出3个窗口,第一个是DLL_PROCESS_ATTACH,第二个是hello first DLL,第三个是DLL_PROCESS_DETACH。
解决方案1: 既然你的函数时按照C的模式导出的,那你在调用时也应该声明为extern "C"的形式,不然函数名称不对,导致函数地址出错
以上介绍了“ DLL调用的的时候,编译通过,运行的时候提示内存不可读”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3282825.html