[讨论]DLL问题待解决
议题作者:lfq7413信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])
本人初学DLL编程~遇到了不少问题~高手看下~
test1.DLL test.exe
下面是test1.DLL的代码~
[code]#include <windows.h>
_declspec(DLLexport) void manage()
{
MessageBox(0,"The Fun manage","HI",MB_OK);
return;
}
BOOL APIENTRY DLLMain(HINSTANCE hinstDLL,DWORD fdwReason,PVOID fImpload)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
MessageBox(0,"test1 ATTACH","HI",MB_OK);
default:
break;
}
return TRUE;
}[/code]
编译通过,无错误~
test.exe的代码~
[code]#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
HINSTANCE hDLL;
FARPROC funAddr;
hDLL=LoadLibrary("test1.dll");
if(!hDLL)
{
MessageBox(0,"wroing","HI",MB_OK);
exit(1);
}
funAddr=GetProcAddress(NULL,"manage");
(*funAddr)();//**************************问题可能在这~
MessageBox(0,"HI","HI",MB_OK);
return TRUE;
}[/code]
编译通过,也无错误,但是在运行test.exe是却总是显示“test.exe遇到问题需要关闭”
在将(*funAddr)();注释掉之后,又可以正常显示下面的MessageBox,
不知道出错在哪儿~~我是用MinGW编译的~~~
请高手帮忙解决一下~ GetProcAddress函数第一个参数是包含获取函数的模块名,所以
funAddr=GetProcAddress(hDLL,"manage");
就行,至于是不是(*funAddr)();的问题,很好判断,在
funAddr=GetProcAddress(NULL,"manage");
后判断一下funAddr就行了 这个问题之前我刚好碰到过.
void manage() 这个是你DLL中函数的原型.
那么在test.exe的代码中这样定义:typedef void (MYFUN *)(void);
然后下面这样写:
MYFUN funAddr=(MYFUN)GetProcAddress(hDLL,"manage");//这里句柄必须得是test.dll的句柄
然后调用funAddr()就可以了.
页:
[1]