加载DLL找不到指定的函数

文西
博客专家认证
2009-11-06 05:09:40
今天加载动态链接库,可以加载到库,但是里面的函数却加载不加来,用errlook工具查看错误信息是找不到指定的函数
将函数名反复看好几遍,复制。还是不行,用Depends工具看链接库的导出函数 明显看到那个函数就在那。
请教大虾原因了 下面是我的主干代码
库:
定义导出函数
HHICRes 和 HICParaml是两个结构体
__declspec (dllexport) HICRes handleCharge(HICParaml &charge)
{
。。。。。。。
}
测试文件
typedef HICRes ( *LPFUNC)(HICParaml &send);//这个前边用不用 __stdcall有差别么 反正都找不到 默认的调用方式不就

是stdcall么

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{

HINSTANCE hdll=::LoadLibrary("Control3.dll");//不会是版本问题,弄了好几次 dll和main里调用的函数名字是一样的
if(hdll!=NULL)
{
LPFUNC pf=(LPFUNC)GetProcAddress(hdll,"handleCharge");
UINT errorid=GetLastError();//错误代码 127 pf为空

}
}
...全文
252 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
一线coder 2009-11-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pro21ms4 的回复:]
__declspec (dllexport)前加extern "C"
不然C++ 编译器会为了重载会修改函数名字, 比如修改成 a7adsd9@funName
[/Quote]
应该是这个问题
「已注销」 2009-11-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 muhuohacker 的回复:]
在__declspec (dllexport)前加extern "C"
或者就是在def文件中写上导出的文件名
[/Quote]
正解.
感觉用 def 更简单..至少代码里面看起来更好看
muhuohacker 2009-11-07
  • 打赏
  • 举报
回复
在__declspec (dllexport)前加extern "C"
或者就是在def文件中写上导出的文件名
winnuke 2009-11-07
  • 打赏
  • 举报
回复
你这个是动态加载,加载名和导出名一定要一样。
如果你没有使用def文件来定义导出名的话,要分两种情况:
1:如果你导出dll的代码是.c结尾,那你加载的函数名可能会是_handleCharge
2:如果是c++的话,这个可能就要看你使用的什么编译器了。你可以通过depends看导出的函数名到底是什么。

如果你用了def文件,就一定按照def中的函数名来加载。
pro21ms4 2009-11-07
  • 打赏
  • 举报
回复
__declspec (dllexport)前加extern "C"
不然C++ 编译器会为了重载会修改函数名字, 比如修改成 a7adsd9@funName
guangmingdeshenju 2009-11-07
  • 打赏
  • 举报
回复
应该就是函数名出了问题吧
用.def文件申明它的导出函数名
gxx2019 2009-11-06
  • 打赏
  • 举报
回复
在__declspec (dllexport)前加extern "C"
onlyliu 2009-11-06
  • 打赏
  • 举报
回复
或者你在导出函数前加上 WINAPI
onlyliu 2009-11-06
  • 打赏
  • 举报
回复
*.def文件是否写了导出函数名称?
onlyliu 2009-11-06
  • 打赏
  • 举报
回复
导出函数方式是否与导入函数方式一致~ 估计调用后名称编译有差异~
  • 打赏
  • 举报
回复
hdll是否加载成功?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧