在C Builder中使用Delphi控件
2008-02-23 05:39:07来源:互联网 阅读 ()
Delphi拥有强大的控件群,如何使用这些控件一直苦恼着我们这些C Builder的追随者,我通过一些项目的实践掌控了一些如何在C Builder中使用Delphi控件的方法。
我的使C Builder使用DelphiVCL类库的方法基于Windows中较通用的DLL方式。在实际应用中找到了将VCL控件转化为DLL库,在C Builder动态调用DLL。此法适用于非可视VCL控件。
假令在Delphi中有一Sample控件,有属性Actived、Pro1、Pro2,欲将这个控件转到C Builder中使用。
一:Delphi中DLL的制作
1.在Delphi中新建一DLL项目SampleDLL,时在此项目中Create一个新的类TTtempcomp基类为TComponent即也为一个控件,在其中加入一个constructorCreate1,但不作任何动作;
2.在DLL中加入要导出的属性的Function(Actived、Pro1、Pro2)&Create、Destroy的框架,Exports中加入导出的Function、Procdure名称;
3.在DLL的主过程中对TTempcomp的实例temp1进行Create1,另外保存出口和配置ExitProc;
4.在OpenSample的函数中加入HwCtrl:=Sample1.Create(temp1)对Sample进行实例化,对CloseSample和其他属性加入相应的语句;
二:C Builder中DLL的使用
1.将Delphi中生成的DLL用implib生成LIB文档加入C Builder的工程文档;
2.在头文档中加入
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);
3.在OpenSample后您就能够使用Delphi中的属性Actived、Pro1、Pro2
三:参考DLLSource如下:
librarySampleDLL;
uses SysUtils,Classes,Sample;
TYPE
TTempcomp=class(TComponent)
private
public
constructorCreate1;
published
end;
var
Sample1:Sample;
SaveExit:Pointer;
temp1:TTempcomp;
constructorTTempcomp.Create1;
begin
//inheritedCreate(self);
end;
/==============================================
functionOpenSample:Boolean;stdcall;export;
begin
HwCtrl:=Sample1.Create(temp1);
IfSample1.Activedthenresult:=true;
end;
procedureCloseSample;stdcall;export;
begin
Sample1.Destroy;
end;
functionActived:Boolean;stdcall;export;
begin
result:=Sample1.Actived;
end;
functionPro1:Interger;stdcall;export;
begin
result:=Sample1.Pro1;
end;
functionPro2:Interger;stdcall;export;
begin
result:=Sample1.Pro2;
end;
/==============================================
procedurelibexit;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并且也是Component,VCL控件的Create、Destroy都由控件的拥有者来动作,也就是AOwner;所以我在此DLL中新配置了一个TTempcomp类继承于Tcomponent且性配置了一个constructor(构造函数)Create1,而实际构造时什么都不做,以次作为要Create的Aowner;
其他更有一种办法就是用Application作为Aowner但是他是基于Tform的作出来的DLL太大;
其实,Inprise(原Borland)尽能够象MicroSoft相同用一些象DCOM类似的组件形式使得产品在同一产品时代保持一定的互用性,来增加产品群的生命力.
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 在BCB中使用VCL控件数组
下一篇: 几种vcl构件的用法
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash