CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

Vc++中生成的DLL如何使用

楼主xinghaifeng(大头)2002-02-25 12:26:05 在 C++ Builder / 基础类 提问

Vc++中生成的DLL如何使用 问题点数:100、回复次数:3Top

1 楼xinghf(xinghf)回复于 2002-02-25 12:39:25 得分 90

需要将。LIB库转化为BCB的格式  
  Top

2 楼kingcaiyao(aking)回复于 2002-02-25 13:03:16 得分 10

这个问题,需要重复好多遍了,VC中的LIB格式与BCB中的LIB格式是不同的,因此需要转换,可以用implib,coff2omf等都可以。  
  因为我看不到我回复的贴子,可用e-mail:chenbin790817@mail.china.com联系我。Top

3 楼dycdyc123(重出江湖)回复于 2002-02-25 13:14:44 得分 0

动态库链接到应用程序中主要有两种方式:隐式链接和显式链接。隐式  
  链接是常用方式。  
   
    如果应用程序和动态库是分别在不同开发平台上编制的,动态库的导入  
  库(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下通过。    
  Top

相关问题

  • 为何VC不能生成DLL文件
  • LoadLibrary VC生成的dll为何失败?
  • vc中取硬盘序列号的源码,硬件API的使用。如何生成dll,如何在VC中把生成值存盘。
  • VC生成的DLL怎样放到别的机器上使用,我一拿到别的地方他就报错,找不到MFC的dll库。
  • 关于vc生成的lib文件使用问题
  • VC中调用VB生成的DLL(java调用VB的DLL)
  • 在VC下如何写DLL,我用VC向导生成了一个空的DLL。
  • 使用vc的向导生成了MFC形式的dll,但是有两个警告,大家来看看是怎么回事?50分相送
  • 为何用VC生成的DLL用RUNDLL32运行总是报错?
  • 请问怎么调用VC++生成的dll?

关键词

  • vc++
  • 函数
  • 动态库
  • 指针
  • 应用程序
  • 开发平台
  • 文件
  • vc
  • 连接
  • dll

得分解答快速导航

  • 帖主:xinghaifeng
  • xinghf
  • kingcaiyao

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo