今天加载动态链接库,可以加载到库,但是里面的函数却加载不加来,用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为空 }
}
将函数名反复看好几遍,复制。还是不行,用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为空 }
}
解决方案 »
- 帮忙分析一下,我的STUN结果,意味着什么?
- 换头像了,顺便问个问题?
- 没有column header的CListCtrl的数据添加
- 国外不断推出先进的开发工具主要目的之一是让他国使用者逐渐远离底层技术而让他们不自觉地、情愿地永远被自己牵着鼻子走!
- 小弟最近想作一个小程序,是用VC写,后台要用一个简单的数据库(本地调用),不知道用什么好。有什么好书介绍这方面的知识吗。
- ado问题 提供源码,找出错误原因,立即给分100-500之间
- 求教!高分!
- 请教:关于WinMain函数的参数
- 我的类咋时隐时现??????
- 用程序软件生成swf格式的学生考试题,这种技术是如何实现的?
- [MFC] 如何实现对话框非阻塞调用?
- MFC的listctrl删除元素时要按顺序吗?我有时一删会连续删几个。。。
如果你没有使用def文件来定义导出名的话,要分两种情况:
1:如果你导出dll的代码是.c结尾,那你加载的函数名可能会是_handleCharge
2:如果是c++的话,这个可能就要看你使用的什么编译器了。你可以通过depends看导出的函数名到底是什么。如果你用了def文件,就一定按照def中的函数名来加载。
或者就是在def文件中写上导出的文件名
感觉用 def 更简单..至少代码里面看起来更好看
用.def文件申明它的导出函数名
不然C++ 编译器会为了重载会修改函数名字, 比如修改成 a7adsd9@funName