在Delphi中使用Queued 元件 (轉)
在中使用Queued Components:namespace prefix = o ns = "urn:schemas--com::office" />
佇列(Queued Components)是一項基於訊息佇列服務(Microsoft Message Queuing Services)的COM+技術。它提供了一種簡易的非同步引用和元件的方法。傳送方和接收方都不心考慮對方現在是否可用和能否獲得而獨立執行。
作為一項COM技術。佇列指的是用於訊息以便將來檢索的空間。佇列提供了一種非連線性的通訊機制(即傳送方和接怍方之間並不是直接相連結,而是透過佇列進行相互通訊)。佇列負責儲存資訊直到接收方準備好為止。由於傳送方和接收方之間不是直接通訊的,所以可以相互之間獨立地執行,而不會影響到雙方。
下面舉例說明如何使用Delphi建立和使用佇列元件。
首先,我們將建立一個。介面中的所有方法必須僅使用IN引數,不能有返回值。這是由於客戶端和伺服器之間並沒有直接的連結。因為不能確切地知道請求什麼時候會被執行,所以客戶端不能一直等待從伺服器獲得應答。
在Delphi中,首先開啟file/new/other/,建立一個ActiveX Library,然後,加入一個automation。為你的伺服器物件取一個名稱,比如QdComponent,其他的選項都使用預設值,單擊OK.這時你將會看到Type Library Editor,新增一個方法,命名為Task1,為這個方法新增一個引數,命名為TaskMessage,設定其型別為BSTR(即Delphi中的WString型別)。如果Type Library Options設定為show Pascal code,那麼你的方法宣告程式碼應與以下程式碼類似:
procedure task1(TaskMessage:widestring) [dispid $00000001];safecall;
儲存專案為MyQdServer,單元檔案為QdServer.
具體程式碼如下:
unit QdServer;
{$WARN SYMBOL_PLATFOOFF}
interface
uses comobj,ActiveX,MyQdServer_TLB,stdvcl,Dialogs;
type
TqdComponent=class(Tauto,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不是預設的 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),找到你的伺服器,右擊選擇啟動。
#這是我的第一份翻譯作品,請不吝賜教。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993825/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從Delphi到Lazarus——Delphi轉換器
- DELPHI 使用dbexpress控制元件連線MySQL資料庫方法Express控制元件MySql資料庫
- Delphi TMSMQTT使用筆記MQQT筆記
- Delphi皮膚控制元件去NAG提示控制元件
- 在Delphi中使用正規表示式校驗身份證號
- Delphi之cxGrid使用技巧一
- delphi 常用控制元件屬性設定說明控制元件
- Delphi在dbgrideh中新增Img顯示blobIDE
- delphi:string,PChar,Array of Char 之間的轉換
- delphi 控制元件 LssCalendar V2.0 (支援農曆的月曆控制元件)控制元件
- 微信小程式video在元件中的使用---暫停影片微信小程式IDE元件
- 提效新紀元-元件化開發在轉轉App中的應用-後端篇元件化APP後端
- vue.js父子元件雙向傳輸資料(v-model在元件中的使用)Vue.js元件
- 在Vue3中使用Element-Plus分頁(Pagination )元件Vue元件
- vue開發中,在js檔案裡使用pinia和元件同步VueJS元件
- delphi opencvOpenCV
- 在 React 中使用 SVG 圖示元件ReactSVG元件
- 在Flex控制元件中使用XMLListCollectionFlex控制元件XML
- 【譯】在 React 元件中使用 Refs 指南React元件
- vue 元件中solt 插槽使用Vue元件
- 在Linux中,有哪些基本元件?Linux元件
- 在WPF中使用WinForm控制元件方法ORM控制元件
- C# 左移右移在資料型別轉換中的使用C#資料型別
- 在畫中畫視窗中安裝 React 元件React元件
- Delphi 論文閱讀 Delphi: A Cryptographic Inference Service for Neural Networks
- 在 Maui 中自繪元件1:繪製UI元件
- Delphi 中禁止 FMX 框架的 TStringGrid 單元格被選中框架
- 如何使用Web3.js API 在頁面中進行轉賬WebJSAPI
- 在 Fedora 上使用 SSH 埠轉發
- Delphi TDictionary字典類
- vue中在父元件點選按鈕觸發子元件的事件Vue元件事件
- 優雅的在React元件中註冊事件React元件事件
- 在Flutter中嵌入Native元件的解決方案Flutter元件
- v-model指令在元件中怎麼玩元件
- 「ReStory」在 Markdown 中自由書寫 React 元件 (Beta)RESTReact元件
- 使用delphi開發人工智慧程式(參考資料)人工智慧
- 玩轉ASP.NET Core中的日誌元件ASP.NET元件
- WPF中Ribbon控制元件的使用控制元件
- Vue元件通訊中eventBus的使用Vue元件