zoukankan      html  css  js  c++  java
  • 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 FilesBorlandCBuilder6Bincoff2omf.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中了吗?

  • 相关阅读:
    为了我们自己的利益,请不要去支持番茄花园。
    游戏版本比较的算法[ZZ]
    DXUT框架剖析(9)
    强制删除任意文件以及文件夹
    安全幻想曲2008
    DXUT框架剖析(12)
    DXUT框架剖析(6)
    [Ph4nt0m] [zz]The Emergence Of A Theme
    俄国农民乘法
    写在msn签名上的I'M 计划
  • 原文地址:https://www.cnblogs.com/enjoyprogram/p/4611027.html
Copyright © 2011-2022 走看看