高手指点一下,很简单了:
我想在dll中声明一个函数,在exe中调用,做createthread()的参数创建线程,createthread()要求函数声明为DWORD WINAPI function(LPVOID param)形式,这样做对不对?在dll中:
extern "C" _declspec(dllexport) DWORD WINAPI proc(LPVOID p)
{
return 0;
}在exe中
typedef DWORD (WINAPI *fun)(LPVOID);
HMODULE handle=loadLibrary("mydll.dll");
fun myProc=GetProcAddress(handle,"proc");
CreateThread(0,0,myProc,0,0,0);可是GetProcAddress()得到的myProc为空,GetLastError()返回127--找不到函数,
不知道为什么,而我不用LoadLibrary(),直接连接dll的lib文件,就没问题,
哪位指点一下,多谢
我想在dll中声明一个函数,在exe中调用,做createthread()的参数创建线程,createthread()要求函数声明为DWORD WINAPI function(LPVOID param)形式,这样做对不对?在dll中:
extern "C" _declspec(dllexport) DWORD WINAPI proc(LPVOID p)
{
return 0;
}在exe中
typedef DWORD (WINAPI *fun)(LPVOID);
HMODULE handle=loadLibrary("mydll.dll");
fun myProc=GetProcAddress(handle,"proc");
CreateThread(0,0,myProc,0,0,0);可是GetProcAddress()得到的myProc为空,GetLastError()返回127--找不到函数,
不知道为什么,而我不用LoadLibrary(),直接连接dll的lib文件,就没问题,
哪位指点一下,多谢
add xxx.def file to dll project.in xxx.def
write like following:EXPORTS
procthen every will be ok.
命令行运行dumpbin a.dll /exports
找到proc函数分裂后的名字(大概是_proc@4)用这个名字再去getprocaddress。有一点要注意的,你的dll要用multithread编译。
并且exe里面最好不要使用createthread(),而是使用_beginthreadex()
是由于你的dll里道出的函数名称不是proc 而是 类似这样的@proc$qpcit一个东西,具体的那容请用 vc里的工具depends 查看。然后把proc替换就可以了。
方法2、
建立一个.def文件,然后加入到工程中
在此文件中写上SECTIONS
proc @1
即可。同时把proc修改
DWORD WINAPI proc(LPVOID p)
{
return 0;
}