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库的问题,能把这一问题解决好行了。

Original: https://www.cnblogs.com/MaxWoods/p/4094786.html
Author: Max Woods
Title: C++Builder及VC的库相互调用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535428/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 代朋友发招聘信息,C++程序员

    急招:高级C/C++程序员工作职能:1、开发工具(地图编辑,动作编辑器等)的维护及新版本的开发。2、Symbian、WM新游戏开发要求:1、精通C/C++语言;2、强烈的责任心和认…

    C++ 2023年5月29日
    052
  • Using WebAssembly threads from C, C++ and Rust

    Learn how to bring multithreaded applications written in other languages to WebAssembly. J…

    C++ 2023年5月29日
    070
  • Modern C++ 模板通用工厂

    Modern C++ 模板通用工厂 1 简单应用示例 1.1 示例代码 1.2 分析说明 2 简单工厂模式 2.1 示例代码 2.2 分析说明 3 工厂 + 静态注册 3.1 示例…

    C++ 2023年5月29日
    067
  • C++ Addon Async 异步机制

    线程队列: libuv,window 可在libuv官网下载相应版本 opencv: 编译的时候opencv的位数要和 node的bit 一致 兼容electron : node-…

    C++ 2023年5月29日
    045
  • 收藏的博客 — Qt/C++学习

    Qt Creator环境: 使用Qt Creator作为Linux IDE,代替Vim:实现两台Linux电脑远程部署和调试(一台电脑有桌面系统,一台电脑无桌面系统) 使用Qt C…

    C++ 2023年5月29日
    047
  • !! vc C++ VS2017检查内存泄漏具体到某一行代码

    VLD工具可以用来检查VS C++程序的内存泄露。 VLD官网:https://kinddragon.github.io/vld/ 官网不方便下载的,可以用我的链接:https:/…

    C++ 2023年5月29日
    048
  • [C++] new和delete运算符使用方法

    new 和 delete 是C++语言中的两个运算符,配套使用。 new:用于分配内存,与C语言中的 malloc 相同,分配在堆内存 delete:用于释放内存,与C语言中的 f…

    C++ 2023年5月29日
    058
  • C++20新特性

    conceptrequiresconstinitconstevalco_awaitco_returnco_yieldchar8_t 优点:1)没有头文件;2)声明实现仍然可分离, …

    C++ 2023年5月29日
    069
  • [c++] 拷贝构造函数

    拷贝构造函数就是进行对象拷贝复制的函数。 拷贝构造函数也是一种构造函数。它用同类型的对象来初始化新创建的对象。其唯一的形参是const类型&,此函数也由系统自动调用。 拷贝…

    C++ 2023年5月29日
    054
  • 【转】C++11 新特性总结

    其他路径: CSDN: https://blog.csdn.net/wodehao0808 微信公众号:程序喵星人 更多资源和视频教程,QQ:1902686547 前言 转载请注明…

    C++ 2023年5月29日
    068
  • [转]C++ 类中的static成员的初始化和特点

    在C++的类中有些成员变量初始化和一般数据类型的成员变量有所不同。以下测试编译环境为: cpp;gutter:true; ➜ g++ -v Using built-in specs…

    C++ 2023年5月29日
    063
  • VC++注册,卸载OCX控件,以及判断是否注册

    注册OCX控件 BOOL CYourClass::RegistOcx() HINSTANCE hLib = LoadLibrary(“NTGraph.ocx&#8221…

    C++ 2023年5月29日
    084
  • LLVM Constant Value to c++ value

    auto llval = b.getInt32(-1); std::cout << llval->getZExtValue() << "\n…

    C++ 2023年5月29日
    075
  • Lua & C++

    Lua 与 C++ 交互 ## 提供系统级别Lua API 提供系统级别API需要对Lua源码进行修改 ### Lua源码编译 [LuaResourceCode]:https://…

    C++ 2023年5月29日
    063
  • vs2019恢复为c++的布局

    工具 -》导入导出设置 -》重置所有设置 -》备份当前设置后下一步 -》 选择一个默认设置集合 Original: https://www.cnblogs.com/bigben01…

    C++ 2023年5月29日
    065
  • Model/View结构(整理自<Qt5.9 C++开发指南>)

    数据模型 数据不仅可以存储在数据模型中,数据可以是其他类,文件,数据库或任何数据源. 视图组件 那些带View的类; 在显示数据时,调用setModel()函数,为自己设置一个数据…

    C++ 2023年5月29日
    066
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球