⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lc_bcb_01.html

📁 C++Builder教学大全
💻 HTML
字号:
<html>



<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<style>

</style>

<title>如何在C++Builder中使用Delphi控件 </title>

</head>



<body>



<p align="center"><big><strong><big><font face="楷体_GB2312" color="#000000">如何在C++Builder中使用Delphi控件</font></big><font face="楷体_GB2312" color="#000000"><br>

<big>上海铁道大学 施江杰</big></font></strong></big></p> 

 

<p align="left"><big><br> 

<br> 

----Delphi的出现将一大批程序员带入了Windows下的可视化编程,为一些C&amp;C++的死党程序员所羡慕、感叹。<br> 

直到C++Builder的出现这些Programer才用到了梦寐以求的编程工具,也将一些不得已&quot;投敌&quot;到Delphi下的程<br> 

序员又拉回到C++的怀抱。她正真将Windows下的可视化编程和面向对象编程语言有机的融合在一起。但是由<br> 

于C++Builder面市时间较短固而可用的控件不多,而且控件的使用也只针对某一版本,相互之间的可互用性<br> 

不好,除非你有SourceCode;对于Delphi就更不用说了,C++Builder根本不能用,当然如果你有SourceCode<br> 

那么你可以转写成C++Builder的控件,不过你还得经过n遍的Complie…m遍的Step&amp;Go…最后※☆▲#\↓。<br> 

----Delphi拥有强大的控件群,如何使用这些控件一直苦恼着我们这些C++Builder的追随者,我通过一些项<br> 

目的实践掌握了一些如何在C++Builder中使用Delphi控件的方法。<br> 

----我的使C++Builder使用DelphiVCL类库的方法基于Windows中较通用的DLL方式。在实际应用中找到了将<br> 

VCL控件转化为DLL库,在C++Builder动态调用DLL。此法适用于非可视VCL控件。<br> 

----假令在Delphi中有一Sample控件,有属性Actived、Pro1、Pro2,欲将这个控件转到C++Builder中使用。<br> 

一:Delphi中DLL的制作<br> 

在Delphi中新建一DLL项目SampleDLL,时在此项目中Create一个新的类TTtempcomp基类为TComponent即也为<br> 

一个控件,在其中加入一个constructorCreate1,但不作任何动作;在DLL中加入要导出的属性的Function<br> 

(Actived、Pro1、Pro2)&amp;Create、Destroy的框架,Exports中加入导出的Function、Procdure名称;在DLL<br> 

的主过程中对TTempcomp的实例temp1进行Create1,另外保存出口和设置ExitProc;在OpenSample的函数中加<br> 

入HwCtrl:=Sample1.Create(temp1)对Sample进行实例化,对CloseSample和其它属性加入相应的语句;<br> 

二:C++Builder中DLL的使用<br> 

将Delphi中生成的DLL用implib生成LIB文件加入C++Builder的工程文件;<br> 

<br> 

在头文件中加入 <br> 

extern &quot;C&quot; __declspec(dllimport) bool _stdcall OpenSample(void); <br>  

extern &quot;C&quot; __declspec(dllimport) void _stdcall CloseSample(void); <br>  

extern &quot;C&quot; __declspec(dllimport) bool _stdcall Actived (void); <br>  

extern &quot;C&quot; __declspec(dllimport) int _stdcall Pro1 (void); <br>  

extern &quot;C&quot; __declspec(dllimport) int _stdcall Pro2 (void); <br>  

<br>  

在OpenSample后你就可以使用Delphi中的属性Actived、Pro1、Pro2 <br>  

三:参考DLL Source如下: <br>  

<br>  

library SampleDLL;<br>  

<br>  

uses<br>  

<br>  

SysUtils, Classes, Sample; <br>  

<br>  

TYPE <br>  

<br>  

TTempcomp = class(TComponent)<br>  

<br>  

private<br>  

<br>  

public<br>  

<br>  

constructor Create1;<br>  

<br>  

published<br>  

<br>  

end;<br>  

<br>  

var <br>  

Sample1 :Sample;<br>  

<br>  

SaveExit :Pointer;<br>  

<br>  

temp1 :TTempcomp;<br>  

constructor TTempcomp.Create1;<br>  

begin<br>  

// inherited Create(self);<br>  

end;<br>  

/==============================================<br>  

function OpenSample: Boolean; stdcall; export;<br>  

begin<br>  

HwCtrl:= Sample1.Create(temp1);<br>  

If Sample1.Actived then result:=true;<br>  

end;<br>  

procedure CloseSample; stdcall; export;<br>  

begin<br>  

Sample1.Destroy;<br>  

end;<br>  

function Actived: Boolean; stdcall; export;<br>  

<br>  

begin<br>  

result:=Sample1.Actived;<br>  

<br>  

end;<br>  

<br>  

function Pro1: Interger; stdcall; export;<br>  

<br>  

begin<br>  

result:= Sample1.Pro1;<br>  

end;<br>  

function Pro2: Interger; stdcall; export;<br>  

<br>  

begin<br>  

result:= Sample1.Pro2;<br>  

<br>  

end;<br>  

<br>  

/==============================================<br>  

<br>  

procedure libexit; far<br>  

<br>  

begin<br>  

<br>  

if Sample1.Actived =true then<br>  

<br>  

Sample1.Destroy;<br>  

<br>  

ExitProc:=SaveExit;<br>  

temp1.Destroy;<br>  

end;<br>  

exports<br>  

OpenSample,CloseSample,Actived ,Pro1,Pro2;<br>  

begin<br>  

<br>  

temp1:=TTempcomp.Create1;<br>  

<br>  

SaveExit:=ExitProc;<br>  

<br>  

ExitProc:=@libexit;<br>  

<br>  

end.<br>  

<br>  

----解释:<br>  

----因为VCL控件都继承于TComponent,TComponent的构造函数需要一个AOwner并且也是TComponent,VCL控<br>  

件的Create、Destroy都由控件的拥有者来动作,也就是AOwner;所以我在此DLL中新设置了一个TTempcomp类<br>  

继承于Tcomponent且性设置了一个constructor(构造函数)Create1,而实际构造时什么都不做,以次作为要<br>  

Create的Aowner;<br>  

----其他还有一种办法就是用Application作为Aowner但是它是基于Tform的作出来的DLL太大;<br>  

----其实,Inprise(原Borland)尽可以象MicroSoft一样用一些象DCOM类似的组件形式使得产品在同一产品<br>  

时代保持一定的互用性,来增加产品群的生命力.</big></p>  

  

</body>  

</html>  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -