在 C++Builder 工程里使用 Visual C++ DLL——第2部分:C++ 类

本文是关于如何在 C++Builder 工程中使用 Visual C++ 编译的 DLL 的第二部分,重点讨论了如何在 C++ 类环境下进行操作。内容涵盖DLL导入、类实例化及内存管理,详细解析了C++Builder与Visual C++间的兼容性问题。
摘要由CSDN通过智能技术生成
在 C++Builder 工程里使用 Visual C++ DLL——第2部分:C++ 类
shadowstar's home: http://shadowstar.126.com/

source:http://www.bcbdev.com/articles/vcdll2.htm

注意:这篇文章描述如何把 C++ 类从 Visual C++ DLL 引入到 BCB 的工程中。在我们开始之前,我觉得必须给出一点警告。这篇文章不是真的准备大量发布的。如果“文章”跌宕起伏,难以阅读,或包含错误,我道赚!我没有时间去改良它。我决定继续并发布的唯一原因是因为很多开发者问到怎么处理这个问题。我认为,一篇写的很烂的文章总比什么都没有好。我希望这个不连贯概念的搜集品会给你带来帮助。

在上一篇文章如何“在 C++Builder 工程里使用 Visual C++ DLL”中,我描述了如何为 MSVC DLL 创建一个 Borland 兼容的引入库。主要的难点在于 MSVC 和 Borland 使用的函数命名格式不同。举例来说,Borland 认为 __cdecl 函数在它们的开头有一个下划线,但 MSVC 没有。幸运的是,你可以用 Borland 命令行实用工具克服名称的不同,这些工具有 TDUMP、IMPLIB、IMPDEF、和 COFF2OMF。方法是用这些命令行工具创建一个带有 Borland 兼容函数名的 Borland 兼容引入库。一旦你拥有了 Borland 兼容引入库,你便可以开始工作了。你可以简单的连接引入库来使用 MSVC DLL。

不幸地,这种策略不能完全带你走出这片森林。在上一篇 DLL 文章的结尾,我丢下了一个小炸弹。你只能调用 MSVC DLL 里简单的 C 函数,而不能引入类或类成员函数。Doh!

那么如果你需要从 MSVC DLL 引入 C++ 类要做些什么呢?啊……这个,如果是那样的话,你就被关到角落里了,没有多少可选择的余地(通常在你退到角落里的时候,你的选项都不是令人满意的)。这篇文描述了三种可以带你走出角落的方法。

坏消息:当你准备花点时间研究这篇垃圾的时候,我觉得,再次,被迫发出警告。所有三种技术需要你有 Microsoft Visual C++。你不需要有要调用的 DLL 的源代码,但你需要有可以调它的工具。三种技术都或多或少使用包装技术,我们用 MSVC 把 DLL 包装成可以在 BCB 里使用的某种形式。

三种技术摘要

Ok, 现丑了。这就是那三种技术。

  1. 用 MSVC 创建一个 DLL,把 C++ 类包裹成简单的 C 函数。简单的 C 函数是可以在 BCB 里引入的。
  2. 用 MSVC 创建一个 COM 对象,把 C++ 类经过限制包装。BCB 可以作为 COM 客户端来调用 VC++ COM 对象。
  3. 把 C++ 类用抽象类包装起来,这个抽象类只带有一些没有实体的虚函数。这从本质上说还是 COM,只是没有了难看的部分。

下面描述各种技术的更多详细内容。在每一个例子中,我们将假定 MSVC DLL 导出的类形式如下:

class CFoo
{
          
public:
    CFoo(int x);
    ~CFoo();

    int DoSomething(int y);
};

技术 1: 把 C++ 类包裹到 C 库里

在前一篇有关 VC++ DLL 的文章里,我们知道在一个 Borland 工程里调用从一个 MSVC DLL 导出的简单的 C 函数是可能的。利用这条信息可知,我们可以在 MSVC 里创建一个 DLL 工程,来导出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值