C++Builder及VC的DLL相互调用[转自csdn论坛]
来源:互联网 发布:java redis缓存list 编辑:程序博客网 时间:2024/04/26 18:53
常在江湖飘,少不了要和DLL打交道。有时我们需要使用C++Builder编写一个DLL,然后拿到VC中用(比如用C++Builder写一个窗体封装到DLL);有时又要拿VC编写的DLL在C++Builder使用(比如拿到一个产品的开发包,这个包是一堆用VC写的DLL)。
很遗憾,由于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.DLLEXPORTS ___CPPdebugHook @2 ; ___CPPdebugHook _aFunc @1 ; _aFunc
那么删除后就变成了:
- C/C++ code
- LIBRARY XXX.DLLEXPORTS __CPPdebugHook @2 ; ___CPPdebugHook aFunc @1 ; _aFunc
4、用VC的LIB工具,根据上面的def文件生成lib文件。如:LIB /DEF:XXX.def。生成lib文件之后,VC便可以使用这个lib文件了。
综上说来,两种工具开发的DLL在相互使用的时候,主要的问题便是lib库的问题,能把这一问题解决好行了。
《Vc++动态链接库DLL编程深入浅出》一书很好
http://topic.csdn.net/u/20090302/17/99d1fbc5-4be6-4744-96d9-09b16c0d93c3.html
- C++Builder及VC的DLL相互调用[转自csdn论坛]
- C++Builder及VC的DLL相互调用
- C++Builder及VC的DLL相互调用
- C++Builder及VC的DLL相互调用
- C++Builder及VC的DLL相互调用示例
- C++Builder、C#、VC调用 C++Builder制作的DLL
- c++builder调用vc的dll
- c++builder调用vc的dll
- c++builder调用VC的dll以及VC调用c++builder的dll
- C++Builder调用VC的dll以及VC调用C++Builder的dll
- c++builder调用VC的dll以及VC调用c++builder的dll
- C++Builder调用VC生成的DLL方法
- C++Builder建立及调用DLL
- VC++和C++builder互相调用动态链接库DLL(VC++编的)笔记
- VC、GCC 之间DLL 的相互调用
- 在C++builder中用伪造的dll生成的lib文件可正常调用vc写的dll
- 调用dll vc++(转自msdn)
- C++ builder 调用VC 封装的dll组件
- 时间控件
- 文件描述符操作
- convert a PKCS 12 cert to PEM format
- 背包问题系列算法详解
- 我们真的被技术抛弃了么?-分享下自己被“陈旧代码”围困后的一点反思
- C++Builder及VC的DLL相互调用[转自csdn论坛]
- 数据库备份与还原
- VC++中如何获得一个当前进程的运行目录
- 脑筋急转弯!
- Tomcat优化 (一)
- (自做工程)阶段总结
- 软件架构设计的思想与模式
- 如何子类化(SubclassWindow)窗体
- Tomcat优化(二)