dll中有个函数名和c++builder一个保留字名一样,如何读取 :(

tuiger 2002-07-21 04:23:46
各位大虾:
  我要实现从一个vc编的dll中读取函数的过程,可是这个dll中有一个unlock函数,BCB中正好有这个函数。
我是这样写的
extern "C" __declspec(dllimport) int _stdcall Unlock(int int1,int int2, int int3, int int4);
。。。
这样在c++builder编译使用这个函数的地方时总出现错误“参数过多”的错误,在BCB中这个函数是没有参数的,请问有没有改名的办法,把DLL中的名字在使用时改过来,类似VB中的alias一样的。非常着急,请多多帮忙!
...全文
45 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuiger 2002-07-21
  • 打赏
  • 举报
回复
补充一点:
因为GetProcAddr要有一个HMODULE参数,所以要使用GetModuleHandle来获得。这个函数是取得已调入内存的DLL的Handle的。
netsbull 2002-07-21
  • 打赏
  • 举报
回复
我没做过类似的测试,也没用过BCB你可以试一试,关注
tuiger 2002-07-21
  • 打赏
  • 举报
回复
我明白了,首先静态加载DLL,然后不再使用loadLibrary,而是直接使用
GetProcAddr取得函数地址,并保存起来!
对不起,我不知道如何加分给你呀!
tuiger 2002-07-21
  • 打赏
  • 举报
回复
你的意思是不是,如果我用静态加载方法先加载,那么如果我以后用动态加载查询函数时,地址是不会变的。BCB支持同时静态加载和动态加载一个DLL么?
tuiger 2002-07-21
  • 打赏
  • 举报
回复
谢谢网牛的回答,我还有一点不明白:
你提到的办法我知道是动态调用。如果将该地址作为全局变量存起来,那么在此次调用后还是要free这个DLL,那么下次加载时DLL所放的地址与此次加载的地址是否一样呢?
netsbull 2002-07-21
  • 打赏
  • 举报
回复
1 LoadLibrary 调入dll
2 GetProcAddr取得函数地址
3 调用函数

4 如果经常用,可以一开始就取得该地址,作为全局变量保存起来,不会影响速度的
tuiger 2002-07-21
  • 打赏
  • 举报
回复
什么叫显示调用呀?我不知道 :(
可以告诉我么?我看到动态调用DLL时可以另起个名字,
可因为我的COM程序是经常调用该DLL的,而且对访问时间上要求也很高。
所以我还是想静态调用,显示调用可以解决么?能写几句例子么?
另外,我看到__fastcall调用会自动在原函数名前加上'_',是不是可以利用这一点呢?不过它是参数左边进栈的 :(
netsbull 2002-07-21
  • 打赏
  • 举报
回复
1 显式调用呢?
2 用vc再写一个dll,导出一个不同的函数,让他调那个函数

70,037

社区成员

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

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