• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

        在Delphi中運(yùn)用Queued Components

        在Delphi中運(yùn)用Queued Components

        更新時(shí)間:2022-05-05 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

        隊(duì)列組件(Queued Components)是一項(xiàng)基于微軟消息隊(duì)列服務(wù)(Microsoft Message Queuing Services)的COM+技術(shù)。它提供了一種簡(jiǎn)易的異步引用和執(zhí)行組件的方法。發(fā)送方和接收方都不心考慮對(duì)方現(xiàn)在是否可用和能否獲得而獨(dú)立運(yùn)行。

        作為一項(xiàng)COM技術(shù)。隊(duì)列指的是用于存儲(chǔ)消息以便將來(lái)檢索的空間。隊(duì)列提供了一種非連接性的通訊機(jī)制(即發(fā)送方和接怍方之間并不是直接相連結(jié),而是通過(guò)隊(duì)列進(jìn)行相互通訊)。隊(duì)列負(fù)責(zé)存儲(chǔ)信息直到接收方準(zhǔn)備好為止。由于發(fā)送方和接收方之間不是直接通訊的,所以可以相互之間獨(dú)立地運(yùn)行,而不會(huì)影響到雙方。

        下面舉例說(shuō)明如何使用Delphi創(chuàng)建和使用隊(duì)列組件。

        首先,我們將創(chuàng)建一個(gè)服務(wù)器。接口中的所有方法必須僅使用IN參數(shù),不能有返回值。這是由于客戶(hù)端和服務(wù)器之間并沒(méi)有直接的連結(jié)。因?yàn)椴荒艽_切地知道請(qǐng)求什么時(shí)候會(huì)被執(zhí)行,所以客戶(hù)端不能一直等待從服務(wù)器獲得應(yīng)答。

        在Delphi中,首先打開(kāi)file/new/other/activeX,創(chuàng)建一個(gè)ActiveX Library,然后,加入一個(gè)automation對(duì)象。為你的服務(wù)器對(duì)象取一個(gè)名稱(chēng),比如QdComponent,其他的選項(xiàng)都使用默認(rèn)值,單擊OK.這時(shí)你將會(huì)看到Type Library Editor,添加一個(gè)方法,命名為T(mén)ask1,為這個(gè)方法添加一個(gè)參數(shù),命名為T(mén)askMessage,設(shè)定其類(lèi)型為BSTR(即Delphi中的WideString類(lèi)型)。如果Type Library Options設(shè)置為show Pascal code,那么你的方法聲明代碼應(yīng)與以下代碼類(lèi)似:

        procedure task1(TaskMessage:widestring) [dispid $00000001];safecall;

        保存項(xiàng)目文件為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.

        安裝服務(wù)器

        在控制面板中打開(kāi)組件服務(wù)工具(Component Services Tool),在文件樹(shù)中找到”COM+ Application”,然后右擊,選擇New/Application接著選擇“Create an empty applcation”根據(jù)提示找到你的新程序,右擊它,轉(zhuǎn)到屬性頁(yè),找到Queuing欄,選擇復(fù)選框中的兩項(xiàng)1.Queued 2.Listen.Listen表示任何被壓入隊(duì)列的消息,當(dāng)它被擊活時(shí),將馬上被處理。在你的新程序下右擊“components”選擇New/Component,選擇“install new component(s)”,根據(jù)提示,找到并安裝你的DLL文件,然后展開(kāi)文件樹(shù)找到“interface”,右擊IqdComponent,打開(kāi)屬性頁(yè),在Queuing欄中選上”Queued”(如果看到出錯(cuò)提示信息“MSMQ IS NOT RUNNING”)那么很可能你沒(méi)有安裝MSMQ,因?yàn)镸SMQ不是默認(rèn)的WINDOWS 2000的安裝選項(xiàng)。

        創(chuàng)建客戶(hù)端

        創(chuàng)建一個(gè)新的Delphi應(yīng)用程序,在uses子句中加入MyQdServer_tlb.pas單元文件,添加一個(gè)按鈕和一個(gè)文本框。

        你需要在程序運(yùn)行時(shí)創(chuàng)建你的對(duì)象,所以使用一個(gè)符號(hào)變量來(lái)標(biāo)記組件的信息,這個(gè)參數(shù)在FormShow事件處理函數(shù)中聲明和使用。

        具體代碼如下:

        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{服務(wù)器的GUID或Server.interfaceName}’;

          Olecheck(NewCoGetObject(Qmoniker,nil,IqdComponent,Qinterface));

        End;

        End.

        運(yùn)行客戶(hù)端程序,然后傳送一條消息,由于此時(shí)你并沒(méi)有啟動(dòng)服務(wù)器,所以這時(shí)并不能顯示出來(lái)這條消息,需要啟動(dòng)服務(wù)器,而最簡(jiǎn)單的方法就是打開(kāi)控制面板中的組件服務(wù)(Component Services),找到你的服務(wù)器,右擊選擇啟動(dòng)。

        溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

        本類(lèi)教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 亚洲av日韩av欧v在线天堂| 免费人成网站在线观看不卡| 中文字幕av无码无卡免费| 亚洲国产夜色在线观看| 亚洲黄色免费观看| 狠狠入ady亚洲精品| 鲁丝片一区二区三区免费| 国产日韩一区二区三免费高清| 国产精品极品美女免费观看| 一本色道久久88—综合亚洲精品| 一色屋成人免费精品网站| 亚洲经典在线观看| 亚洲大香人伊一本线| 毛片无码免费无码播放| 亚洲视频一区网站| 久久免费国产精品| 亚洲AV永久纯肉无码精品动漫| 大地影院MV在线观看视频免费 | 亚洲国产成人AV网站| 国产成人精品免费直播| 一级女性全黄生活片免费看| 国产亚洲精品精品国产亚洲综合| 拍拍拍无挡视频免费观看1000| 亚洲AV日韩精品久久久久| 久久受www免费人成_看片中文| 亚洲精品精华液一区二区| 亚洲精品视频免费观看| 亚洲一区中文字幕久久| 99爱在线精品免费观看| 亚洲av无码兔费综合| 毛片免费观看的视频在线| 免费国产在线精品一区| 亚洲爆乳无码一区二区三区| 国产人在线成免费视频| 亚洲区日韩精品中文字幕| 亚洲国产精品自产在线播放| 毛片无码免费无码播放| 精品久久久久亚洲| 蜜芽亚洲av无码精品色午夜| 日韩在线视频免费看| 未满十八18禁止免费无码网站|