c++builder调用vc的dll


  • 联系
  • 订阅随笔- 93  文章- 0  评论- 3 

    c++builder调用vc的dll

    $bcb/bin目录中有个implib.exe
    把你的vc.dll和implib.exe复制到c盘根目录下
    运行cmd
    进入c盘根目录执行
    c:\implib -a cb.lib vc.dll
    会生成cb.lib,将生成出的文件添加进入工程,然后再将对应的.h添加进入工程,将dll复制到项目路径下即可。

     

    --------------------------------------------------------------------------------------------------------
    VC++的.lib有两种:一种是静态DLL,其中包括函数的实际代码,一种是有DLL生成的.lib,其中并不包含代码,只是包含DLL的链接信息。对 于后一种比较简单,只需要使用C++ Builder中的命令行工具implib直接对DLL进行进行转换就可以了,不必理会VC++的.lib文件。但 是前一种就很麻烦了,因为VC++和BCB的.lib格式差别很大,无法直接使用或转换。以前我也遇到过类似的问题,一个硬件厂商只提供了VC++的库文 件,为了在BCB中使用,首先在VC++中建立一个DLL,添加若干函数,这些输出函数供BCB调用。在这些函数中调用.lib中的函数。这样BCB调用 DLL中的函数,DLL中的函数再调用.lib中的函数,虽然麻烦些,但可以解决问题。
    用Program Files\Borland\CBuilder6\Bin\coff2omf.exe转换就了! 
        主持人注:coff2omf可以转换微软的COFF格式为Borland使用的OMF格式。但是这个工具有一些限制:转换一般的C函数还可以,转换C++类有困难;这个工具在处理新版本的VC++生成的库时可能有问题。 
        另外,可以参考 “Using Visual C++ DLLs in a C++Builder Project”http://www.bcbdev.com /articles/vcdll.htm和http://www.bcbdev.com/articles/vcdll2.htm 
    据说VC的lib文件跟BCB不通用

    不过你也不用急啊,有dll文件可以自已生成lib文件滴

    implib filename.lib filename.dll

    就可以生成一个lib
    如果你有DLL的话可以用IMPLIB从DLL中生成符合BCB要求的LIB文件。也可以用COFF2OMF来转换LIB文件的格式。

    coff2omf   a.lib   b.lib   
      将库文件a.lib转换格式生成库文件b.lib

      如果他是一个dll的导出库,你可以用implib xxx.lib xxx.dll自己做一个lib

    如果他是vc的静态库,可以给coff2omf分别加几次不同的参数试试:
    -lib:ms
    -lib:st
    -lib:ca
    看有没有哪次可以的  

    ---------------------------------------------------------------------------

    命令行工具 TDUMP 允许你检查 DLL 导出函数的连接名字。下面向 DLL 调用 TDUMP 的命令。

      TDUMP -ee -m MYDLL.DLL > MYDLL.LST

      TDUMP 能报告许多关于 DLL 的信息。我们仅对 DLL 的导出函数感兴趣。-ee 命令选项指示 TDUMP 仅列出导出信息。-m 开关告诉 TDUMP 按 DLL 函数的原始格式显示。如果没有 -m 开关,TDUMP 将尝试把修饰过的函数转化为人们易读的格式。如果 DLL 很大的话,你应该重定向 TDUMP 的输出到一个文件里(通过附加的 > MYDLL.LST)。

      TDUMP 为源程序清单 A 和 B 的测试 DLL 输出如下:

      Turbo Dump Version 5.0.16.4 Copyright (c) 1988, 1998 Borland International
      Display of File DLL.DLL

      EXPORT ord:0000='CdeclFunction'
      EXPORT ord:0002='UnknownFunction'
      EXPORT ord:0001='_StdCallFunction@4'

      注意在 __stdcall 函数上的前缀下划线和后缀 @4。__cdecl 和未指定调用方式的函数没有任何修饰符。

    ----------------------------------------------------------------------------

    32位DLL的引入库是.lib格式,64位DLL的引入库是.a格式。64位的DLL只能在64位的程序中调用。检查一下.a文件的路径,确认加入到工程中了?或者用#pragma指令的话,.a文件所在的路径包含在library path中了吗?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值