在C++Builder中总么用Deliph写的控件

BallyTan 2001-10-26 11:29:52
有时想用C++BUILDER带的VCL的源代码(OBJECT PASCAL写的吧)修改一下做个新的控件
或者说有时有Deliph控件的源代码/
请问我怎么将它用到C++BUILDER中去/
我试了一下我找的几个控件/运行时说找不到头文件/

再就是是否可以详细介绍一下用C++Builder怎么做compoent/

比如:multi-column-comboBox

我是菜鸟/各位大侠帮忙/

谢谢/
...全文
95 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kk_liwei 2001-10-30
  • 打赏
  • 举报
回复



控件使用
如何在C++Builder中使用Delphi控件
Delphi 的 出 现 将 一 大 批 程 序 员 带 入 了Windows 下 的 可 视 化 编 程, 为 一 些C&C++ 的 死 党 程 序 员 所 羡 慕、 感 叹。 直 到C++Builder 的 出 现 这 些Programer 才 用 到 了 梦 寐 以 求 的 编 程 工 具, 也 将 一 些 不 得 已" 投 敌" 到Delphi 下 的 程 序 员 又 拉 回 到C++ 的 怀 抱。 她 正 真 将Windows 下 的 可 视 化 编 程 和 面 向 对 象 编 程 语 言 有 机 的 融 合 在 一 起。 但 是 由 于C++Builder 面 市 时 间 较 短 固 而 可 用 的 控 件 不 多, 而 且 控 件 的 使 用 也 只 针 对 某 一 版 本, 相 互 之 间 的 可 互 用 性 不 好, 除 非 你 有Source Code; 对 于Delphi 就 更 不 用 说 了,C++Builder 根 本 不 能 用, 当 然 如 果 你 有Source Code 那 么 你 可 以 转 写 成C++Builder 的 控 件, 不 过 你 还 得 经 过n 遍 的Complie …m 遍 的Step&Go … 最 后 ※ ☆ ▲ # \ ↓。
Delphi 拥 有 强 大 的 控 件 群, 如 何 使 用 这 些 控 件 一 直 苦 恼 着 我 们 这 些C++Builder 的 追 随 者, 我 通 过 一 些 项 目 的 实 践 掌 握 了 一 些 如 何 在C++Builder 中 使 用Delphi 控 件 的 方 法。
我 的 使C++Builder 使 用Delphi VCL 类 库 的 方 法 基 于Windows 中 较 通 用 的DLL 方 式。 在 实 际 应 用 中 找 到 了 将VCL 控 件 转 化 为DLL 库, 在C++Builder 动 态 调 用DLL。 此 法 适 用 于 非 可 视VCL 控 件。
假 令 在Delphi 中 有 一Sample 控 件, 有 属 性Actived、Pro1、Pro2, 欲 将 这 个 控 件 转 到C++Builder 中 使 用。

一:Delphi 中DLL 的 制 作
在Delphi 中 新 建 一DLL 项 目SampleDLL , 时 在 此 项 目 中Create 一 个 新 的 类TTtempcomp 基 类 为TComponent 即 也 为 一 个 控 件, 在 其 中 加 入 一 个constructor Create1, 但 不 作 任 何 动 作;
在 DLL 中 加 入 要 导 出 的 属 性 的Function (Actived、Pro1、Pro2)&Create、Destroy 的 框 架,Exports 中 加 入 导 出 的Function、Procdure 名 称;
在DLL 的 主 过 程 中 对TTempcomp 的 实 例temp1 进 行Create1, 另 外 保 存 出 口 和 设 置ExitProc;
在OpenSample 的 函 数 中 加 入 HwCtrl:= Sample1.Create(temp1) 对Sample 进 行 实 例 化, 对CloseSample 和 其 它 属 性 加 入 相 应 的 语 句;

二:C++Builder 中DLL 的 使 用
将Delphi 中 生 成 的DLL 用implib 生 成LIB 文 件 加 入 C++Builder 的 工 程 文 件;
在 头 文 件 中 加 入
extern "C" __declspec(dllimport) bool _stdcall OpenSample(void);
extern "C" __declspec(dllimport) void _stdcall CloseSample(void);
extern "C" __declspec(dllimport) bool _stdcall Actived (void);
extern "C" __declspec(dllimport) int _stdcall Pro1 (void);
extern "C" __declspec(dllimport) int _stdcall Pro2 (void);
在OpenSample 后 你 就 可 以 使 用Delphi 中 的 属 性Actived 、Pro1、Pro2

三: 参 考DLL Source 如 下:
library SampleDLL;
uses
SysUtils, Classes, Sample;
TYPE
TTempcomp = class(TComponent)
private
public
constructor Create1;
published
end;

var
Sample1 :Sample;
SaveExit :Pointer;
temp1 :TTempcomp;
constructor TTempcomp.Create1;
begin
// inherited Create(self);
end;
/==============================================
function OpenSample: Boolean; stdcall; export;
begin
HwCtrl:= Sample1.Create(temp1);
If Sample1.Actived then result:=true;
end;

procedure CloseSample; stdcall; export;
begin
Sample1.Destroy;
end;

function Actived: Boolean; stdcall; export;
begin
result:=Sample1.Actived;
end;

function Pro1: Interger; stdcall; export;
begin
result:= Sample1.Pro1;
end;

function Pro2: Interger; stdcall; export;
begin
result:= Sample1.Pro2;
end;

/==============================================

procedure libexit; far
begin
if Sample1.Actived =true then
Sample1.Destroy;
ExitProc:=SaveExit;
temp1.Destroy;
end;
exports
OpenSample,CloseSample,Actived ,Pro1,Pro2;
begin
temp1:=TTempcomp.Create1;
SaveExit:=ExitProc;
ExitProc:=@libexit;
end.

解 释:
因 为VCL 控 件 都 继 承 于TComponent,TComponent 的 构 造 函 数 需 要 一 个AOwner 并 且 也 是TComponent,VCL 控 件 的Create、Destroy 都 由 控 件 的 拥 有 者 来 动 作, 也 就 是AOwner; 所 以 我 在 此DLL 中 新 设 置 了 一 个TTempcomp 类 继 承 于Tcomponent 且 性 设 置 了 一 个constructor( 构 造 函 数)Create1, 而 实 际 构 造 时 什 么 都 不 做, 以 次 作 为 要Create 的Aowner;
其 他 还 有 一 种 办 法 就 是 用Application 作 为Aowner 但 是 它 是 基 于Tform 的 作 出 来 的DLL 太 大;
其 实,Inprise( 原 Borland) 尽 可 以 象MicroSoft 一 样 用 一 些 象DCOM 类 似 的 组 件 形 式 使 得 产 品 在 同 一 产 品 时 代 保 持 一 定 的 互 用 性, 来 增 加 产 品 群 的 生 命 力



huche 2001-10-30
  • 打赏
  • 举报
回复
我昨天提了一个问题,今天发现被删掉了,原来以前你问过这个问题呀,怎么没人回答呢????、
Sephil 2001-10-30
  • 打赏
  • 举报
回复
直接在BCB的包里ADD *.PAS,编译就可以了啊!
kk_liwei 2001-10-30
  • 打赏
  • 举报
回复
你装一个好了!
BallyTan 2001-10-30
  • 打赏
  • 举报
回复
这东东我见过了/不过我机上没在装DELIPH呀/
smartdraw 2001-10-26
  • 打赏
  • 举报
回复
我也想知道,帮你UP
BallyTan 2001-10-26
  • 打赏
  • 举报
回复
up
Borland C++Builder 5.0 (简介)   Borland C++Bilder 5.0是Interprise(Borland)公司推出的基于C++ 语言的快速应用程序开发(Rapid Application Development,RAD)工具,它是最先进的开发应用程序的组件思想和面向对象的高效语言C++融合的产物。C++Builder 充分利用了已经发展成熟的Delphi 的可视化组件库(Visual Component Library,VCL),吸收了Borland C++ 5.0 这个优秀编译器的诸多优点。C++Builder 结合了先进的基于组件的程序设计技术,成熟的可视化组件库和优秀编译器,调试器。发展到5.0版本,C++Builder 已经成为一个非常成熟的可视化应用程序开发工具,功能强大而且效率高。 C++Builder的特色: 1.C++Builder 是高性能的C++开发工具   C++Builder是基于C++的,它具有高速的编译,连接和执行速度。同时,C++Builder具有双编译器引擎,不仅可以编译C/C++程序,还能编译Object Pascal语言程序。 2.C++Builder是优秀的可视化应用程序开发工具   C++Builder是一完善的可视化应用程序开发工具,使程序员从繁重的代码编解放出来,使他们能将注意力重点放在程序的设计上,而不是简单的重复的劳动。同时,它提供的完全可视的程序界面开发工具,从而使程序员对开发工具的学习周期大大缩短。 3.C++Builder具有强大的数据库应用程序开发功能   C++Builder 提供了强大的数据库处理功能,它使的程序员不用一行代码就能开发出功能强大的数据库应用程序,这些主要依赖于C++Builder众多的数据库感知控件和底层的BDE数据库引擎。C++Builder除了支持MicroSoft的ADO(Active Data Object)数据库连接技术,还提供了一种自己开发的成熟的数据库连接技术——BDE(Borland Database Engine)数据库引擎。 4.C++Builder具有强大的网络编程能力 C++Builder具有众多的Internet应用程序开发控件,如WebBroker,CppWebBroswer,WinSocks等,它们基本含盖了Internet应用的全部功能,利用它们程序员可以方便地建立自己地Internet应用程序。

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧