回 帖 发 新 帖 刷新版面

主题:在BCB中怎样调用Dll动态链接库文件!

在BCB中怎样调用Dll动态链接库文件!如果有例子说明更好!!先谢谢各位了!

回复列表 (共4个回复)

沙发

动态链接库的调用可以分外两种:明确连接和隐含连接
当你编完一个DLL程序以后,用_declspec(dllexport)来输出声明,然后就可以调用了
  如果你是用明确连接的话需用到LoadLibrary函数载入,然后用GetProAddress来取得地址,最后用FreeLibrary释放.
 用隐含连接的话只要在.cpp文件中加入_declspec(dllimport)来输入声明即可

板凳

谢谢!不过有例子说明那就更好了。。。希望你发一个例子给我看好吗?
我的邮箱:gy_wfc@126.com

3 楼

动态库链接到应用程序中主要有两种方式:隐式链接和显式链接。隐式链接是常用方式。
 如果应用程序和动态库是分别在不同开发平台上编制的,动态库的导入库(lib文件)可能会与应用程序的开发平台所要求的导入库格式不相容,从而在应用程序与动态库隐式链接时,出现程序链接错误:contains invalid OMF record。例如在C++Builder开发平台上链接Visual C++制作的动态库时,就会出现上述的错误。解决这一问题,可以采用两种方法:显式连接法和使用C++Builder中提供的导入库生成工具。

  显式连接:显式连接不需要在工程中加入导入库和相应的头文件,只需要把动态库放入指定的目录下。在应用程序中通过函数调用显式的装载和卸掉DLL,通过函数指针来调用DLL的导出函数。

  步骤:

  1. 调用LoadLibrary函数装载DLL并得到模块句柄;
  2. 调用GetProcAddress函数获取指定导出函数的指针;
  3. 用这个函数的指针调用该函数;
  4. 使用完毕后,用FreeLibrary释放DLL。

  例子:

HINSTANCE handle; //DLLa模块的句柄
  FARPROC lpFarProc;
  void (*lpaddit)(int,int,int *);//指向addit函数的指针
  int ntemp;
  handle = LoadLibrary(″addit.dll″); //装载addit.dll, 得到该库句柄 addit.dll位于当前目录下
  lpFarProc = GetProcAddress(handle,″addit″);   //得到指向函数addit的指针
  lpaddit = (void(__cdecl *)(int, int, int *))lpFarProc; //指针类型转换
  lpaddit(2,3,&ntemp); //使用addit函数
  FreeLibrary(handle); //将addit.dll从程序中卸掉

4 楼

我这个是隐藏链接,而且还是用BCB编写的Dll文件,而且使用C++Builder中提供的导入库生成工具,这样也是报同样的错误。

我来回复

您尚未登录,请登录后再回复。点此登录或注册