当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

C++Builder中动态库的链接问题[VC/C++编程]

赞助商链接



  本文“C++Builder中动态库的链接问题[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

动态库链接到利用程序中主要有两种方法:隐式链接和显式链接.隐式链接是常用方法.

假如利用程序和动态库是辨别在差别开辟平台上编制的,动态库的导入库(lib文件)大概会与利用程序的开辟平台所要求的导入库格局不相容,从而在利用程序与动态库隐式链接时,呈现程序链接错误:contains invalid OMF record.比方在C++Builder开辟平台上链接Visual C++制作的动态库时,就会呈现上述的错误.办理这一问题,可以采取两种办法:显式衔接法和利用C++Builder中供应的导入库生成工具.

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

步骤:

1. 调用LoadLibrary函数装载DLL并得到模块句柄;

2. 调用GetProcAddress函数获得指定导出函数的指针;

3. 用这个函数的指针调用该函数;

4. 利用完毕后,用FreeLibrary释放DLL.

例子:

用VC++制作一个动态库:

选new→Project→Win32—Dynamic—Link Library,加入addit.cpp

  extern ″C″
   {
   void __declspec( dllexport ) addit(int a, int b, int *c)
   {
    *c = a + b;
   }
   }
   addit.h
   extern ″C″
   {void addit(int a, int b, int *c);}

编译链接生成addit.dll和addit.lib.在C++Builder程序中调用addit函数.

C++Builder程序中:

  {
   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从程序中卸掉
   }

此程序在VC++ 5.0 和C++Builder 3.0下通过.

利用C++Builder中供应的导入库生成工具:先预处理,后隐式链接.

步骤:

1.用C++Builder供应的implib.exe工具重新生成该动态库(xxx.dll)的导入库(xxx.lib).号令以下:

implib addit.lib addit.dll.

addit.dll为已有动态库,addit.lib为要生成的导入库.由此生成的导入库addit.lib格局与C++Builder开辟平台是相容的;

2.在动态库的头文件addit.h中,对其输出函数重新阐明,语句以下:

extern __stdcall void addit( int a, int b, int *c);

3.然后采取隐式链接法,将重新生成的导入库(addit.lib)和重新阐明的头文件(addit.h)加入到C++Builder利用程序的工程项目中,举行编译和衔接.

addit.dll按上述步骤操作,在VC++ 5.0 和C++Builder 3.0下通过.


  以上是“C++Builder中动态库的链接问题[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 用maven-jdocbook-plugin简单配置docbook5.0环境
  • 向Docbook5.0过渡系列(1)
  • 向Docbook5.0过渡系列(2)-给Image加链接
  • 用CB在WIN.INI中保存信息
  • 用BCB3.0制作桌面动画
  • <b>若何用BCB做出可移动的菜单</b>
  • <b>CB的Form最小化时无动画的缘由</b>
  • <b>如安在BCB中调试Active Form</b>
  • <b>CB编程中动态更改自定义打印纸张</b>
  • <b>用CB制作具有HTML气势的动态按钮</b>
  • <b>BCB中实现TRichEdit的自动格局化</b>
  • <b>通过预编译头文件来提高CB的编译速度</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .