在Delphi与C++之间实现函数与对象同享[VC/C++编程]
本文“在Delphi与C++之间实现函数与对象同享[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在Delphi中调用C++函数与C++调用Delphi函数相当直接,需求注意的是,Delphi 1默许的函数调用方法是Pascal方法,Delphi 4、Delphi 5的默许方法则是优化的cdecl调用方法,即register方法.要在C++ 与Delphi程序之间实现函数同享,除非有充分的缘由,不然应当利用尺度系统调用方法,即stdcall方法.为了使C++编译器不将函数标志为"mangled",使Delphi编译器误认为函数是采取cdecl调用方法,应当在C++代码中,以extern "C "阐明被同享的函数,以下例所示:原型阐明:在C++中:extern "C" int _stdcall TestFunc();在Delphi中:function TestFunc:integer;
stdcall;调用语法:在C++中:int i=TestFunc();
在Delphi中:var i:integer;…
begin…
i:=TestFunc;…
end;同享函数的参数必须是两种语言都支持的变量范例,这是精确传送参数的前提.诸如Delphi的currency、string、set等变量范例,在C++中没有相对应的变量范例,不能被用作同享函数的参数.可以用PChar范例以值参的方法传送字符串指针,这时用户必须注意字符串空间的回收.
Delphi语言中的变参应被阐明成C++中呼应变量范例的引用情势,以下:在Delphi中:function TestFunc(var i:integer):integer;在C++
中:int TestFunc(int &i);代码链接在Delphi与C++之间实现代码链接可采取静态链接或动态链接的方法.
1.静态链接方法假如C++程序本身的代码量很小,并且无需耽忧与C运行库会有交互历程,普通可选用静态链接方法,即把Delphi与C++的
目标文件(*.OBJ)链接成终究的可履行文件.具体的办法是利用{$L}编译指令,使Delphi编译器自动读取指定目标文件,阐明以下:function TestFunc:integer;stdcall;{$L TestFunc.OBJ}2.动态链接方法假如C++代码已经相当全面或自成一个完好的子系统,代码量很大,大概用到了C运行库,在这种情形下,应当利用动态链接库(DLL)的方法.此时,在两种语言的源代码中应做以下阐明:在C++中:int stdcall export TestFunc();在elphi中:function TestFunc:integer; stdcall;external''TestFunc.DLL'';对象的同享在C++与Delphi之间的对象同享主要表目前对象办法(Method)的同享方面,这种同享可分为两个层次:对象(Object) 级同享与类(Class)级同享.要实现对象级同享,程序计划语言需具有两个前提条件:可以定义指向由另一语言成立的对象的指针;可以拜候由指针肯定的对象中的办法.
要实现类级的同享,则还需考虑:可以成立由另一种语言定义的类的实例;可以从堆中释放一个实例所占用的空间;派生新的类.
以下介绍在Delphi与Borland C++之间实现对象同享的办法.
1.C++同享Delphi对象要实现从C++调用Delphi对象,首先要在Delphi单元的接口部份以及C++的头文件中阐明需求同享的对象的接口,在对象接口中定义该对象包含哪些属性与办法,并阐明可供同享的部份.
对象的同享,关键在于办法的同享.在Delphi语言中,要使一个对象可以被同享,可以把它阐明为两个接口部份,暂称为"同享接口"与"实现接口".此中同享接口指明对象中哪些办法可被另一种语言所同享;实现接口则担当同享接口,并且在单元实现部份针对实现接口中的办法定义具体的实现.要定义一个可供C++同享的Delphi对象,同享接口的阐明应注意:在Delphi程序里,要同享的办法必须被阐明为抽象(abstract),并且虚拟(virtual );在C++程序里,必须用关键字"virtual"及"=0"后缀,把从Delphi同享的办法阐明成"pure virtual";同享的对象办法必须在两种语言里都被阐明成相同的调用方法,普通利用尺度系统调用方法(stdcall).
下面,举例阐明这些法则,假定有这样的一个Delphi对象:TTestObject=classprocedure
Proc1(x:integer);function Func1(x:integer):PChar;procedure
Proc2;function Func2:integer;end;假如C++程序需求同享此中的办法Proc1、Func1,可把上陈述明改正成以下情势:
STestObject=classprocedure
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;};
以上是“在Delphi与C++之间实现函数与对象同享[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |