明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線(xiàn)學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

使用 COM+ 參數(shù)化對(duì)象結(jié)構(gòu)編程技術(shù)

[摘要]作者: 陳一蛟 一、引言COM+ 服務(wù)技術(shù)的一個(gè)核心理念就是系統(tǒng)本身提供完成許多面向企業(yè)應(yīng)用開(kāi)發(fā)者的通用基本模組(如線(xiàn)程、物件資源池管理、事務(wù)服務(wù)管理、事件服務(wù)管理等),讓系統(tǒng)設(shè)計(jì)人員把精力集中在企業(yè)應(yīng)用本身的業(yè)務(wù)邏輯上。COM+提供了許多新的服務(wù)和一致的管理運(yùn)行環(huán)境,它還支援申明性編程模型(de...
作者: 陳一蛟

一、引言

COM+ 服務(wù)技術(shù)的一個(gè)核心理念就是系統(tǒng)本身提供完成許多面向企業(yè)應(yīng)用開(kāi)發(fā)者的通用基本模組(如線(xiàn)程、物件資源池管理、事務(wù)服務(wù)管理、事件服務(wù)管理等),讓系統(tǒng)設(shè)計(jì)人員把精力集中在企業(yè)應(yīng)用本身的業(yè)務(wù)邏輯上。

COM+提供了許多新的服務(wù)和一致的管理運(yùn)行環(huán)境,它還支援申明性編程模型(declarative programming model),也就是說(shuō),開(kāi)發(fā)人員可以按盡可能通用的方式開(kāi)發(fā)元件程式,把一些細(xì)節(jié)留到配置時(shí)刻再確定。例如,在開(kāi)發(fā)一個(gè)COM+元件,它支援事務(wù)處理特性,但是我們?cè)陂_(kāi)發(fā)元件的時(shí)候,並不確定它是否使用事務(wù)處理特性,而把是否支援事務(wù)處理特性留待配置時(shí)刻再作決定。有的應(yīng)用可能會(huì)需要事務(wù)處理特性,而有的應(yīng)用可能並不需要,我們可以通過(guò)COM+管理程式配置元件的屬性來(lái)決定元件是否支援事務(wù)處理特性。MTS安全模型實(shí)際上是一個(gè)典型的申明性編程技術(shù),它把元件的安全角色資訊留到配置時(shí)刻再給出確切的定義,而非編程時(shí)刻。COM+繼承了MTS的安全模型。

利用COM+的服務(wù)和管理工具,開(kāi)發(fā)一個(gè)COM+元件要比開(kāi)發(fā)一個(gè)COM元件容易得多,因爲(wèi)COM+元件實(shí)際上是建立在COM+系統(tǒng)服務(wù)基礎(chǔ)上的應(yīng)用程式,我們可以避免底層繁瑣的細(xì)節(jié)處理,如多線(xiàn)程的並發(fā)處理。通過(guò)COM+系統(tǒng)服務(wù),在獲得可靠性的同時(shí),也使的元件和應(yīng)用程式更趨於標(biāo)準(zhǔn)化,在更廣泛的範(fàn)圍內(nèi)體現(xiàn)元件或者應(yīng)用的多態(tài)性。

COM+ 的推出終于有機(jī)的統(tǒng)一了 COM/DCOM/MTS 的編程模式,使得我們不需要區(qū)分我們編寫(xiě)的是什么類(lèi)型的COM 對(duì)象,所編寫(xiě)的對(duì)象既是 COM 對(duì)象也是 COM+對(duì)象;在 COM+ 中物件環(huán)境和截取(intercept) 技術(shù)都被合併到標(biāo)準(zhǔn)的 COM代理/存根中,所以可以通過(guò)標(biāo)準(zhǔn)得 CoCreateInstance 方法來(lái)創(chuàng)建物件,並且通過(guò)CreateInstance方法創(chuàng)建的MTS 元件同樣可以在COM+ 正常運(yùn)行和完全相容。

二、參數(shù)化 COM+ 對(duì)象結(jié)構(gòu)

在COM+ 中引入了許多新的服務(wù)何功能,參數(shù)化對(duì)象結(jié)構(gòu)就是其中一項(xiàng)功能。本功能是用來(lái)實(shí)現(xiàn)為COM+對(duì)象創(chuàng)建提供一個(gè)字串參數(shù),組件對(duì)象通過(guò)IObjectConstruct接口來(lái)查詢(xún)管理員配置的字串參數(shù)。參數(shù)化對(duì)象結(jié)構(gòu)的一個(gè)典型用途就是可以應(yīng)用到程序中作為 ADO 的連接字串參數(shù)。

IObjectConstruct 讓的方法或?qū)ο笸ㄟ^(guò)參數(shù)來(lái)控制相關(guān)對(duì)象處理功能,我們必須使用接口對(duì)象來(lái)實(shí)現(xiàn)此接口,當(dāng)管理員將組件對(duì)象的對(duì)象結(jié)構(gòu)配置參數(shù)設(shè)置有效后,COM+ 將調(diào)用 IObjectConstruct.Construct 通過(guò)IObjectConstructString來(lái)獲取參數(shù)化 COM+ 對(duì)象結(jié)構(gòu)中的字串參數(shù)。

IObjectConstructString 接口用來(lái)存取建立者字符串。本對(duì)象是一個(gè)Automation COM 對(duì)象,但無(wú)須通過(guò)接口對(duì)象來(lái)實(shí)現(xiàn)他,COM+ 支持在調(diào)用 IObjectConstruct.Construct 時(shí)暴露此對(duì)象。

如何為元件輸入對(duì)象結(jié)構(gòu)字串。

1、在組件管理器中選取相應(yīng)的組件,右鍵彈出快捷菜單,然后點(diǎn)擊屬性

2、在組件屬性對(duì)話(huà)框,點(diǎn)擊激活屬性頁(yè)。

3、使能對(duì)象結(jié)構(gòu),輸入建立者字符串(例如一個(gè) ADO 連接字串)。

三、程序?qū)崿F(xiàn)

實(shí)現(xiàn)COMPlusServer

1、Import Type library->COM+ Services Type Library->Create Unit

2、建立一個(gè)新的 ActiveX Library Project

3、創(chuàng)建一個(gè)新的 MTS Data Module

4、到 Type Library 中選取 Project->Uses->點(diǎn)擊右鍵選擇 Show All Type Library->選擇COM+

Services Type Library

5、選擇 COM 的接口對(duì)象->Implements->點(diǎn)擊右鍵選擇 Insert Interface ->IObjectConstruct

6、在接口中定義一個(gè)新的的方法-> GetConString

7、到組件對(duì)象實(shí)現(xiàn)單元中實(shí)現(xiàn)以下代碼:

private

{ Private declarations }

objSonStr: IObjectConstructString;

StrDemo: WideString;

function TXXXServer.Construct(const pCtorObj: IDispatch): HResult;

begin

pCtorObj.QueryInterface(IID_IObjectConstructString, objSonStr);

StrDemo := objSonStr.Get_ConstructString;

end;

procedure TXXXServer.GetConString;

begin

if trim(StrDemo) = '' then

ShowMessage('沒(méi)有字串')

else

ShowMessage(StrDemo);

end;

客戶(hù)端程序

客戶(hù)端程序是最一般化的 Delphi 代碼:

procedure TForm1.Button1Click(Sender: TObject);

begin

DCOMConnection1.AppServer.GetConString;

end;