电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> delphi技术>>Dephi 之DLL技巧汇集(2):

Dephi 之DLL技巧汇集(2)

来源:远方网络 | 2005-12-31 9:31:32 | (有1770人读过)

1.C++共享Delphi对象

要实现从C++调用Delphi对象,首先要在Delphi单元的接口部分以及C++的头文件中说明需要共享的对象的接口,在对象接口中定义该对象包含哪些属性与方法,并说明可供共享的部分。对象的共享,关键在于方法的共享。在Delphi语言中,要使一个对象可以被共享,可以把它说明为两个接口部分,暂称为"共享接口"与"实现接口"。其中共享接口指明对象中哪些方法可被另一种语言所共享;实现接口则继承共享接口,并且在单元实现部分针对实现接口中的方法定义具体的实现。要定义一个可供C++共享的Delphi对象,共享接口的说明应注意:

在Delphi程序里,要共享的方法必须被说明为抽象(abstract),而且虚拟(virtual );

在C++程序里,必须用关键字"virtual"及"=0"后缀,把从Delphi共享的方法说明成"pure virtual";

共享的对象方法必须在两种语言里都被说明成相同的调用方式,通常使用标准系统调用方式(stdcall)。

下面,举例说明这些规则,假设有这样的一个Delphi对象:

TTestObject=class

procedure Proc1(x:integer);

function Func1(x:integer):PChar;

procedure Proc2;

function Func2:integer;

end;

如果C++程序需要共享其中的方法Proc1、Func1,可把上述说明修改成以下形式:

STestObject=class

procedure Proc1(x:integer); virtual; abstract; stdcall;

function Func1(x:integer); virtual; abstract; stdcall;

end;

TTestObject=class(STestObject)

procedure Proc1(x:integer);

fuction Func1(x:integer):PChar;

procedure Proc2;

fuction Func2:integer;

end;

在C++程序中做如下对象原型说明:

class STestObject {

virtual void Proc1(int x)=0;

virtual char *Func1(int x)=0;

};

为了能在C++中成功地访问Delphi定义的类, Delphi接口说明时必须包含一个可共享的"制造函数(Factory Function)"CreateTestObject,该制造函数可被定义在动态链接库或目标文件(.OBJ)中,例如:

Library TestLib;

exports CreateTestObject;

function CreateTestObject:STestObject; stdcall;

begin

Result:=TTestObject.Create;

end;



end.

经过这样的处理,现在可在C++程序中使用这个由Delphi定义的对象,调用方式如下:

extern "C" STestObject stdcall *CreateTestObject();

void UseTestObject(void) {

STestObject *theTestObject=CreateTestObject();

theTestObject->Proc1(10);

Char *str=theTestObject->Func1(0);

}

当调用制造函数CreateTestObject时,实际上已经在Delphi一侧占用了一个对象实例的空间,C++程序在针对该对象的所有处理完成后必须考虑释放这一空间,具体的实现可在Delphi中定义一个类,如上述Proc1的共享方法Free,以此来完成这一任务:

STestObject=class

procedure Proc1(x:integer); virtual; abstract; stdcall;

function Func1(x:integer); virtual; abstract; stdcall;

procedure Free; virtual; abstract; stdcall;

end;



implementation



procedure TTestObject.Free;

begin



end;



end.

delphi技术热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号