大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 在Delphi中使用Queued Components

在Delphi中使用Queued Components

时间: 2021-07-31 作者:daque

部队组件(queued components)是一项鉴于微软动静部队效劳(microsoft message queuing services)的COM+本领。它供给了一种简略的异步援用和实行组件的本领。发送方和接受方都不心商量对方此刻能否可用和是否赢得而独力运转。动作一项COM本领。部队指的是用来保存动静再不未来检索的空间。部队供给了一种非贯穿性的通信体制(即发送方和接怍方之间并不是径直贯串结,而是经过部队举行彼此通信)。部队控制保存消息直到接受方筹备好为止。因为发送方和接受方之间不是径直通信的,以是不妨彼此之间独登时运转,而不会感化到两边。底下举例证明怎样运用delphi创造和运用部队组件。开始,咱们将创造一个效劳器。接口中的一切本领必需仅运用in参数,不许有归来值。这是因为存户端和效劳器之间并没有径直的连结。由于不许真实地领会乞求什么功夫会被实行,以是存户端不许从来等候从效劳器赢得应答。在delphi中,开始翻开file/new/other/activex,创造一个activex library,而后,介入一个automation东西。为你的效劳器东西取一个称呼,比方qdcomponent,其余的选项都运用默许值,单击ok.这时候你将会看到type library editor,增添一个本领,定名为task1,为这个本领增添一个参数,定名为taskmessage,设定其典型为bstr(即delphi中的widestring典型)。即使type library options树立为show pascal code,那么你的本领证明代码应与以次代码一致:procedure task1(taskmessage:widestring) [dispid $00000001];safecall;生存名目文献为myqdserver,单位文献为qdserver.简直代码如次:unit qdserver;{$warn symbol_platform off}interfaceuses comobj,activex,myqdserver_tlb,stdvcl,dialogs;type  tqdcomponent=class(tautoobject,iqdcomponent)  protectedprocedure task1(const taskmessage:widestring);safecall;  end;implementionuses comserv;procedure tqdcomponent.task1(const taskmessag:widestring);begin  showmessage(taskmessage);end;initialization tautoobjectfactory.create(comserver,tqdcomponent,class_qdcomponent         cimultiinstance,tmapartment);end.安置效劳器在遏制面板中翻开组件效劳东西(component services tool),在文献树中找到”com+ application”,而后右击,采用new/application接着采用“create an empty applcation”按照提醒找到你的新步调,右击它,转到属性页,找到queuing栏,采用复选框中的两项1.queued 2.listen.listen表白任何被压入部队的动静,当它被击活时,将赶快被处置。在你的新步调下右击“components”采用new/component,采用“install new component(s)”,按照提醒,找到并安置你的dll文献,而后打开文献树找到“interface”,右击iqdcomponent,翻开属性页,在queuing栏当选上”queued”(即使看到堕落提醒消息“msmq is not running”)那么很大概你没有安置msmq,由于msmq不是默许的windows 2000的安置选项。创造存户端创造一个新的delphi运用步调,在uses子句中介入myqdserver_tlb.pas单位文献,增添一个按钮和一个文本框。你须要在步调运转时创造你的东西,以是运用一个标记变量来标志组件的消息,这个参数在formshow事变处置因变量中证明和运用。简直代码如次:unit unit1;interfaceuseswindows,messages,sysutils,variants,classes,graphics,controls,forms,dialogs,stdctrls,comobj,activex,myqdsever_tlb,type  tform1=class(tform)edit1;tedit;button1:tbutton;procedure button1click(sender:tobject);procedure formshow(sender:tobject);  privateqinterface:iqdcomponent;  public{public declarations}  end;var  form1:tform1;implemention{$r*.dfm}function newcogetobject(pazname:pwidechar;pbindoptions:pbindopts;const iid:tiid;out ppv):hresult;stdcall;external ‘ole32.dll’ name‘cogetoject’procedure tform1.button1click(sender:tobject);begin  qinterface.task1(edit1.text);end;procedure tform1.formshow(sender:tobject);var  qmoniker:pwidechar;begin  qmoniker:=’queue:/new{效劳器的guid或server.interfacename}’;  olecheck(newcogetobject(qmoniker,nil,iqdcomponent,qinterface));end;end.运转存户端步调,而后传递一条动静,因为此时你并没有启用效劳器,以是这时候并不许表露出来这条动静,须要启用效劳器,而最大略的本领即是翻开遏制面板中的组件效劳(component services),找到你的效劳器,右击采用启用。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.