紧急求助DLL问题

semir 2000-09-03 11:04:00
有人用过动态链接库的动态链接吗?
为什么用LOADLIBRARY可以获得DLL的正确句柄,但用GetProcAddress得到的函数指针
总是NULL。
是否有什么需要注意的地方。
...全文
174 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt642 2001-05-31
  • 打赏
  • 举报
回复
28002关注!
semir 2000-09-04
  • 打赏
  • 举报
回复
有人用过动态链接库的动态链接吗?
为什么用LOADLIBRARY可以获得DLL的正确句柄,但用GetProcAddress得到的函数指针
总是NULL。而且用GetLastError获得的错误代码为126。
但用静态链接方式时正常。
关键部分代码为:
typedef int (*LOAD)();//定义函数指针
HINSTANCE hinstance;
LOAD testdll; //声明
int retvalue; //函数返回
...

hinstance = loadlibrary("filename.dll");//获得句柄
//此处省略判断
testdll = (LOAD)GetProcAdress(hinstance,"testfunction");//得到函数入口
retvalue = testdll(); //函数调用
Kevin_qing 2000-09-04
  • 打赏
  • 举报
回复
再标准C里面int fun(){}编译后再符号表里面存的是_fun
如果是C++编译的符号就更为复杂了,你找不到函数就是因为这个问题。
使用dumpbin dllname /exports
可以看该dll输出的函数名,使用这个名字做参数才可以找到该函数

Zhouxw 2000-09-03
  • 打赏
  • 举报
回复
1.函数是否输出:e.g int WINAPI testfunction();
2.def文件中包含:e.g. EXPORTS testfunction
3.在需要调用的地方,应该有函数指针的定义:
typedef int (*LOAD)();//定义函数指针
LOAD testdll; //声明
int retvalue; //函数返回
.....

hinstance = loadlibrary("filename.dll");//获得句柄
//此处省略判断
testdll = (LOAD)GetProcAdress(hinstance,"testfunction");//得到函数入口
retvalue = testdll(); //函数调用

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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