zoukankan      html  css  js  c++  java
  • C++Builder及VC的库相互调用

    coff2omf  vc.lib  bc.lib

    implib -f xxx.lib xxx.dll

    dll文件为VC编译的动态库
    lib文件为你需要转换的c++ builder 使用的静态库。

    这也是c++ builder自带的转换工具,控制台里面可输入implib -h查看命令使用帮助。

    很遗憾,由于MS和Borland(CodeGear)两家的编辑器实现细节不同,造成了它们生成的DLL不能相互通用,因此给实际带来了很多的麻烦。下面来说一说如何解决这个问题。
    一、VC生成DLL,C++Builder调用。 1、用extern "C"修饰VC导出的DLL函数。如:extern "C" __declspec(dllexport) int aFunc(int a);
    2、用C++Builder的implib工具生成DLL对应的lib文件。如:implib -a xxx.lib xxx.dll(注意,implib一定要带-a开关)。生成lib文件之后,C++Builder便可以使用这个lib文件了。
    二、C++Builder生成DLL,VC调用。 1、用extern "C"修饰C++Builder导出的DLL函数。如:extern "C" __declspec(dllexport) int aFunc(int a);
    2、用C++Builder的impdef工具生成DLL对应的def文件。如:impdef xxx.def xxx.dll。
    3、用记事本打开xxx.def文件,删去每个函数名前的"_"。如原来的def文件为:

    C/C++ code
    LIBRARY XXX.DLL
    EXPORTS
    ___CPPdebugHook @2 ;
    ___CPPdebugHook _aFunc @1 ;
    _aFunc

    那么删除后就变成了:

    C/C++ code
    LIBRARY XXX.DLL
    EXPORTS
    __CPPdebugHook @2 ;
    ___CPPdebugHook aFunc @1 ;
    _aFunc

    4、用VC的LIB工具,根据上面的def文件生成lib文件。如:LIB /DEF:XXX.def。生成lib文件之后,VC便可以使用这个lib文件了。
    综上说来,两种工具开发的DLL在相互使用的时候,主要的问题便是lib库的问题,能把这一问题解决好行了。

  • 相关阅读:
    A. SwapSort
    D. A Shade of Moonlight
    利用DataSet更改数据,将更改保存到数据库中
    接口设计与数据同步解决方案小结
    SQL 判断 ‘表,存储过程,函数 ...’ 已是否存在
    SQL Server系统表sysobjects介绍与使用
    【转】SQL Server 2008 事件探查器(SQL SERVER Profiler)
    SQL 常用语句
    网页开发 组件
    中文版的jqGrid实例大全
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/4094786.html
Copyright © 2011-2022 走看看