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 的命令。ui

  TDUMP -ee -m MYDLL.DLL > MYDLL.LST命令行

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

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

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

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

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

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

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

相关文章
相关标签/搜索