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

  • 主题发起人 主题发起人 funcy333
  • 开始时间 开始时间
F

funcy333

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
  我要实现从一个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一样的。非常着急,请多多帮忙!
 
用loadlibrary,getprocaddress方式调用把
 
Delphi中可以如下:
Function HtmlHelpAlias(hwd : integer;pszFile : String;uCommand :Integer;dwData :LongInt):integer;
stdcall;
external 'HHCtrl.ocx' name 'HtmlHelpA';
C++Builder不知道,不过估计类似
 
c++builder中没有类似的办法,或者说俺还没找到。可我手头的Delphi又借人了,55555~~~~~~~~~
还有没有朋友帮忙,如果没有,我就把分加给这两位好心的哥们了。
 
强烈关注!
 
C++中也应该有。慢慢来。
 
看来最快的办法是通过动态显示调用。如果我用静态加载方法先加载,然后在内存中查到
函数时,地址是不会变的。办法如下:
1、静态加载
2、用GetModuleHandle取得hModule值,再调用GetProcAddress取得该函数,同时可以
显式改名。
   (不可用loadLibrary,因为dll已经在内存里了)



Top

回复人: tuiger(老虎) ( ) 信誉:100 2002-7-21 21:43:26 得分:0


我明白了,首先静态加载DLL,然后不再使用loadLibrary,而是直接使用
GetProcAddr取得函数地址,并保存起来!
对不起,我不知道如何加分给你呀!


Top

回复人: netsbull(网牛) ( ) 信誉:100 2002-07-21 21:47:00 得分:0


我没做过类似的测试,也没用过BCB你可以试一试,关注


Top

回复人: tuiger(老虎) ( ) 信誉:100 2002-07-21 21:51:00 得分:0


补充一点:
因为GetProcAddr要有一个HMODULE参数,所以要使用GetModuleHandle来获得。这个函数是取得已调入内存的DLL的Handle的。


Top


该问题已经结贴 ,得分记录: netsbull (100)、







管理 | 关闭窗口


 
多人接受答案了。
 
顶啊顶完了。。
 
后退
顶部