转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
在Delphi中使用Queued 组件         ★★★★

在Delphi中使用Queued 组件

作者:闵涛 文章来源:闵涛的学习笔记 点击数:904 更新时间:2009/4/23 18:41:03
 

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

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

 

 

 

 

 

 


[常用软件]在Maxthon中使用Google网站加速器  [常用软件]在POWERBUILDER中使用WINSOCK控件的方法
[VB.NET程序]在VB.NET中使用MS Access存储过程 — 第二部份  [VB.NET程序]在VB.NET中使用MS Access存储过程 — 第一部份
[VB.NET程序]在 VB 中使用 Unicode API  [VB.NET程序]VB中使用WMI获取系统硬件和软件有关信息
[Delphi程序]DELPHI中使用API函数详解  [Delphi程序]在delphi中使用flash控件
[Delphi程序]在delphi中使用xml文档有两种方法  [Delphi程序]Delphi 7 中使用RAVE报表(一)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台