分享
 
 
 

在Delphi中使用Queued 组件

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

在Delphi中使用Queued Components

队列组件(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}

interface

uses comobj,ActiveX,MyQdServer_TLB,stdvcl,Dialogs;

type

TqdComponent=class(TautoObject,IQdComponent)

Protected

Procedure Task1(const TaskMessage:widestring);safecall;

End;

Implemention

Uses 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;

interface

uses

Windows,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);

Private

Qinterface: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),找到你的服务器,右击选择启动。

#这是我的第一份翻译作品,请不吝赐教。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有