原文地址:
http://topic.csdn.net/u/20090302/17/99d1fbc5-4be6-4744-96d9-09b16c0d93c3.html
原创帖,引用的朋友请标明出处。
常在江湖飘,少不了要和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文件为:
LIBRARY XXX.DLL
EXPORTS
___CPPdebugHook @2 ; ___CPPdebugHook
_aFunc @1 ; _aFunc
那么删除后就变成了:
LIBRARY XXX.DLL
EXPORTS
__CPPdebugHook @2 ; ___CPPdebugHook
aFunc @1 ; _aFunc
4、用VC的LIB工具,根据上面的def文件生成lib文件。如:LIB /DEF:XXX.def。生成lib文件之后,VC便可以使用这个lib文件了。
综上说来,两种工具开发的DLL在相互使用的时候,主要的问题便是lib库的问题,能把这一问题解决好行了。
分享到:
相关推荐
C++builder调用VCdll.pdf 本文档详细介绍了C++builder调用VC编写的DLL的过程,并对__cdecl、__fastcall、__stdcall三种调用约定的解析。 在函数调用过程中,堆栈的使用是非常重要的。C++builder和VC在调用DLL时,...
这种跨环境的DLL调用涉及到多个方面的注意事项和技术细节。本文通过具体的示例来讲解这一过程。 #### 准备工作 要在C++Builder中调用Visual C++编写的DLL,首先需要准备以下三个要素: 1. **DLL文件**:由Visual ...
本篇将基于提供的文件信息——BCB调用VC的DLL里的方法,来深入探讨这一技术知识点。 ### BCB与VC简介 - **BCB**:Borland C++ Builder 的简称,是由Borland公司开发的一款集成开发环境(IDE),主要面向C++语言。...
本篇文章将详细介绍如何在BCB环境中调用由VC编译生成的DLL(动态链接库),以及在这一过程中可能遇到的问题及解决方法。 #### 描述:BCB调用VC的DLL 当开发者需要利用BCB进行程序开发时,可能会面临需要调用由VC...
总结来说,C++调用Borland C++ Builder的DLL涉及了Windows API的使用、DLL的动态加载和函数指针调用。而VC++通过COM组件开发Mentor的软件,则是利用了COM接口的跨语言特性。结合两者,可以构建复杂的应用程序架构,...
标题中的"pb9调用vc的dll"是指在PowerBuilder 9(PB9)这个集成开发环境中,如何调用由Visual C++(VC)编译生成的动态链接库(DLL)文件。这是一个跨语言和平台的技术实践,允许PB9应用程序利用C++编写的函数和功能...
对于C++Builder而言,则需要使用 `implib` 命令将 `ijl15.dll` 转换为 `ijl15_cb.lib` 文件,并将其放入 `bin` 文件夹内,以便于C++Builder正确识别和调用。 **第二步:环境配置** 1. 在C++Builder中新建一个项目,...
需要注意的是,MATCOM分为针对Visual C++ (VC) 和Borland C++ Builder (BCB)的不同版本。 - **安装Borland C++ Builder 6.0**: 这是主要的开发环境,用于构建C++应用程序。 - **安装MATCOM 4.5**: 在此环境中转换...
标题中的“BCB编译VC dll错误总结”指的是在使用Borland C++ Builder (BCB) 这一集成开发环境时,尝试链接由Microsoft Visual C++ (VC) 编译的动态链接库(DLL)时遇到的问题。描述中提到的具体错误是"BCB contains ...
具体地,文章介绍了如何设计PowerBuilder与VC之间的DLL调用接口以及Excel报表实现流程,并通过一个实际案例——院校教学保障管理中的教材库存管理信息系统——进行了详细阐述。 #### 关键技术要点 - **动态链接库...
标题中的“pb调用vCdll的摄像程序”指的是使用PowerBuilder(PB)这个编程工具通过动态链接库(DLL)来调用Visual C++(VC)编写的DLL文件,实现摄像头视频的采集功能。在软件开发中,DLL是一种可重用代码的库,可以...
在本文中,我们将深入探讨如何在Visual C++ 6(简称VC6)环境中使用gzip库进行数据的压缩和解压。gzip是一种广泛应用于网络数据传输的压缩格式,它基于Deflate算法,能够有效地减小文件大小,从而提高传输效率。...
标题“PB调用VC创建的标注win32 dll 不用注册”涉及到的技术点主要集中在PowerBuilder(PB)和Visual C++(VC++6.0)的集成开发环境中,以及动态链接库(DLL)的创建与调用。在这个场景下,我们讨论的是如何在Power...
本文以院校教学保障管理中实际应用的教材库存管理系统为例,探讨了如何结合PowerBuilder和Visual C++的优势,通过VB创建一个动态链接库(DLL),并在PowerBuilder中调用该DLL来实现Excel报表功能。这种方法不仅实现...
尽管本例中并未使用C++Builder,但它的提及表明DLL注入的概念可以跨多个C++编译器和平台应用。 至于"源码",它可能包含了实现上述功能的完整C++代码,这对于学习和理解DLL注入的过程非常有价值。遗憾的是,压缩包中...
对DLL初学者很适用挺适用,用BCB(C++ Builder)编写,网上很难找到一个完整的例子,只要认真研究下,自己再写DLL动态库或调用DLL动态库之类的,基本没难度,希望对亲有所帮助; 补充说明:早期刚学的时候写的demo,...
### Matcom4.5与Borland C++ Builder(简称BCB)的教程 #### 一、安装篇 本节将详细介绍如何安装Matcom4.5与Borland C++ Builder(简称BCB)。首先,我们需要注意到Matcom分为两种版本:一种是针对Visual C++ (VC) ...
SatJni是C++编写的动态链接库,实现了C#,PB,Delphi,VB,VC等对Java的调用,能让你很容易地调用成熟的java类库和第三方java组件。不用再为移值java代码而烦恼。 示例中演示了PB调用webservice服务(无需代理对象)得到...
VC6.0是Visual C++的一个版本,是一款广泛使用的C++集成开发环境,适用于包括Winsock在内的各种Windows编程任务。 首先,要使用Winsock API,必须在程序开始时进行初始化。这通常通过调用`WSAStartup`函数完成,该...