您现在的位置: 软界网软界问答软件开发VC/VC.NET/MFC > 问题显示
我要提问    
提示:提问和回答别人的问题均可赢得积分
加入收藏我要投诉 我来回答
此问题已经被浏览27次,收藏:0次. 所属类别:[VC/VC.NET/MFC]
问题:调用DLL的基本问题 〈〈〈〈〈?
环境是VC6,DLL是用WIN32 DLL建的,DLL文件中出口函数定义如下:
void _declspec(dllexport) HookOff ()
{
。。。
}
在EXE中用以下语句调用失败
HINSTANCE hDll=LoadLibrary ("..\\dll\\debug\\dll.dll");
if (hDll==NULL)
{
errOut("failed to open dll file!");
return 1;
}
typedef (*MYFUN) (HINSTANCE);
MYFUN mf=NULL;
mf=(MYFUN)GetProcAddress(hDll,"HookOn");
if (mf==NULL)
{
errOut("failed to find function!");//此处出了问题
return 1;
}
FreeLibrary(hDll);
请问以上哪个步骤出了问题,在线等,多谢。
提问时间:2007-10-31 23:55:54 回答次数:(14) 提问人:软界网友 我来回答
回答(1)
和DEF文件有关吗?我没定义DEF文件
回答人:软界网友 我来回答
回答(2)
* Mackz
* 在相互
* 等 级:


发表于:2007-11-01 00:35:093楼 得分:0
你这个typedef定义的函数指针,参数类型和返回类型是否正确?
可以用depends看一下dll是否导出了函数。
---------------------
depends结果:
右边窗口上一栏是空的
下一栏显示如下:
HookOff@@YAXXZ
?HookOn@@YGXPAUHINSTANCE__@@@Z
这是不是证明已经导出函数了?
回答人:软界网友 我来回答
回答(3)
你这个typedef定义的函数指针,参数类型和返回类型是否正确?
可以用depends看一下dll是否导出了函数。
回答人:软界网友 我来回答
回答(4)
HINSTANCE hDll = LoadLibrary("..\\dll\\debug\\dll.dll");
if (hDll == NULL)
{
errOut("failed to open dll file!");
return 1;
}

typedef (*MYFUN) (FunPtr); //care:变量名..
FunPtr mf = NULL;
mf = (FunPtr)GetProcAddress(hDll, "HookOff"); //你上面写的Dll导出函数是HookOff()...
//care:HookOff()它返回的是*MYFUN类型的..?

if (mf == NULL)
{
errOut("failed to find function!");
return 1;
}

FreeLibrary(hDll);

-----

你这代码写的那是相当"夸张"啊...

hehe
回答人:软界网友 我来回答
回答(5)
回楼上,那是我粘错了,不好意思,HOOKON的函数定义那是那样的。
丢人了,呵呵。
回答人:软界网友 我来回答
回答(6)
*
*
* 等 级:


发表于:2007-11-01 12:15:127楼 得分:0
HookOff@@YAXXZ
?HookOn@@YGXPAUHINSTANCE__@@@Z
这是不是证明已经导出函数了?

你没有def文件,导出函数名字已经改编了


typedef (*MYFUN) (HINSTANCE);
MYFUN mf=NULL;
mf=(MYFUN)GetProcAddress(hDll, "HookOn ");
if (mf==NULL)
{
errOut( "failed to find function! ");//此处出了问题
这里就要用改编后的函数名字把
=======================================
mf=(MYFUN)GetProcAddress(hDll,"?HookOn@@YGXPAUHINSTANCE__@@@Z");
这样写已经可以了,多谢。
这种情况是不是一定要用DEF文件才能使之为HookOn?不然就会有一些字符?能自动生成DEF文件吗?
回答人:软界网友 我来回答
回答(7)
HookOff@@YAXXZ
?HookOn@@YGXPAUHINSTANCE__@@@Z
这是不是证明已经导出函数了?

你没有def文件,导出函数名字已经改编了


typedef (*MYFUN) (HINSTANCE);
MYFUN mf=NULL;
mf=(MYFUN)GetProcAddress(hDll, "HookOn ");
if (mf==NULL)
{
errOut( "failed to find function! ");//此处出了问题
这里就要用改编后的函数名字把
回答人:软界网友 我来回答
回答(8)

下一栏显示如下:
HookOff@@YAXXZ
?HookOn@@YGXPAUHINSTANCE__@@@Z
这是不是证明已经导出函数了?


------

dll导出了函数: HookOff() 和 HookOn()

函数的返回类型是 *MYFUN 的..?
回答人:软界网友 我来回答
回答(9)
能否贴一下比较完整的代码,这样看不出来。
回答人:软界网友 我来回答
回答(10)
没人来了吗?介绍下经验吧
回答人:软界网友 我来回答
回答(11)
我给你说下我的经验,你试试吧:
1:extern "C" _declspec(dllexport) void HookOff () ;
2:typedef void (*MYFUN)();
MYFUN mf = NULL;
mf = (MYFUN)GetProcAddress(hDll, "HookOff "); //这里你哪来的HookOn 呢?
祝你好运!
回答人:软界网友 我来回答
回答(12)
结帖了,问题我再开帖问吧。多谢各位
回答人:软界网友 我来回答
回答(13)
HINSTANCE hDll=LoadLibrary ( "..\dll\\debug\\dll.dll ");
回答人:软界网友 我来回答
相关问题
关键字: HookOff,HookOn,NULL,GetProcAddress,YGXPAUHINSTANCE__,failedtofindfunction,这是不是证明已经导出函数了,MYFUNmf,YAXXZ,HINSTANCEhDll,LoadLibrary,spanstyle,此处出了问题,FunPtr,FF0000,debug
我来回答
验证码