当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

在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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 在Delphi与C++之间实现函数与对象同享
  • 在Delphi编程中利用C语言代码
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .