快速业务通道

在Delphi与C++之间实现函数与对象共享

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
;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;};

为了能在C++中成功地访问Delphi定义的类, Delphi接口说明时必须包含一个可共享的"制造函数(Factory Function)"CreateTestObject,

该制造函数可被定义在动态链接库或目标文件(.OBJ)中,例如:LibraryTestLib;exports CreateTestObject;function CreateTestObject:STestObject;

stdcall;beginResult:=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=classprocedure 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.2.Delphi共享C++对象通常,程序员会考虑使用Delphi来编制用户界面,所以Delphi代码调用C++代码似乎显得更加实际些。其实,Delphi

共享C++对象的实现方法与上述C++共享Delphi对象非常相似。用同样的共享接口与实现接口说明方法来定义C++的类:class STestObjedt

{virtual void Proc1(int x)=0;virtual char *Func1(int x)=0;};classTTestObjedt :public STestObject {void Proc1(int x);char *Func1(int

x);void Proc2();int Func2();void Free();};然后实现这些方法。同样地,C++对象需要一个与之对应的制造函数,这里以DLL为例STestObject

stdcall export *CreateTestObject() {return (STestObject *) new TTestObject.Create;}Delphi代码可以通过调用制造函数reateTestObject,很容易地在C++中创建实例,获得指向该实例的指针值,并以这个指针值来调用对象中的共享方法。当然,在进行完该对象的相关处理后,千万不要忘了调用Free释放占用的空间。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号