国产aaaa级全身裸体精油片_337p人体粉嫩久久久红粉影视_一区中文字幕在线观看_国产亚洲精品一区二区_欧美裸体男粗大1609_午夜亚洲激情电影av_黄色小说入口_日本精品久久久久中文字幕_少妇思春三a级_亚洲视频自拍偷拍

Delphi中的COM應(yīng)用 Delphi中的COM應(yīng)用

Delphi中的COM應(yīng)用

  • 期刊名字:計(jì)算機(jī)時(shí)代
  • 文件大小:145kb
  • 論文作者:雷孝平
  • 作者單位:山東經(jīng)濟(jì)學(xué)院研究生部
  • 更新時(shí)間:2020-06-12
  • 下載次數(shù):
論文簡(jiǎn)介

Computer Era No 10 2002Delph中的COM應(yīng)用雷孝平(山東經(jīng)濟(jì)學(xué)院研究生部,山東濟(jì)南250014)摘要:COM技術(shù)并不特定于某種編程語言。本文以 Delphi為例,解釋了在 Delphi中COM的幾個(gè)基本要素是怎么實(shí)現(xiàn)的,并舉例說明。關(guān)鍵字: Delphi;COM;接口;GUID;類工廠COM( Component Object Model,組件對(duì)象模型)是生成的每個(gè)COM組件和接口,并向操作系統(tǒng)和其他軟件惟一Microsoft生成軟件組件的標(biāo)準(zhǔn),可以將它比喻成一個(gè)規(guī)則簿,標(biāo)識(shí)這個(gè)組件。對(duì)組件或接口進(jìn)行任何改變時(shí),就產(chǎn)生新的如果遵守COM規(guī)則,那么你的軟件能夠與其他組件交換信息,GUID。GUD是個(gè)128位整數(shù)現(xiàn)在還沒有一種編程語言能夠?qū)崿F(xiàn)軟件組件在二進(jìn)制上的兼容性。通俗地說,COM提供了一支持128位的整數(shù), Object Pascal中用一個(gè)叫TGUD的記錄種比較低層次的對(duì)象綁定機(jī)制,只提供對(duì)象間彼此通信的能來代表GUID,聲明如下:力。COM技術(shù)并不特定于某種編程語言,只要遵循同樣的接typ口,可以用C++、 Pascal、 Basic等不同語言實(shí)現(xiàn)。那么在 DelphiPGUID=中是怎么實(shí)現(xiàn)COM的呢?TGUID ED1: LongWord1 Delph中的接囗Delphi3開始引入的 Interface關(guān)鍵字可以讓我們輕松聲D3: Word明COM接口。聲明接口非常類似于聲明一個(gè)類但接口只有屬D4: array[o.7] of Byte性和方法而沒有數(shù)據(jù),而且接口并不實(shí)現(xiàn)自己,我們只能通過類來實(shí)現(xiàn)接口,并通過創(chuàng)建實(shí)現(xiàn)接口的類的對(duì)象來得到一個(gè)接由于以這種記錄方式為變量和常量賦GUID值非常麻煩,口的實(shí)例。接口的釋放也有特殊性:無論在接口上調(diào)用Fe或因此 Object Pascal允許用以下格式的字符串來表示TGUD者 Release方法都會(huì)引起非法訪問!在 Delph中,釋放接口的正(xXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX確方法是將接口指針置為nl,這會(huì)自動(dòng)調(diào)用 Release的COM這樣,對(duì) Delphi編譯器來說,下面兩種聲明是等效的:方法。而且, Delphi會(huì)自動(dòng)為我們跟蹤C(jī)OM對(duì)象在它過期時(shí)Ny Guid: TGuid=(01:$12345678;D2:$1234;D3:$1234將它釋放所以我們不必關(guān)心COM對(duì)象的釋放問題D4:($01,$02,$03,$04,$05,$06,$07,$08)所有的COM接口都是從 IUnknown接口繼承而來。 Delphi My Guid:Toud=123456781234-1234-12345678}中,Unknown的聲明如下:3類工廠為了得到COM對(duì)象的實(shí)例,我們需要為此COM對(duì)象實(shí)現(xiàn)類工廠。 Delphi中,類工廠支持 IClassFactory接口,它的聲明r0oo0000o000o0c0o00000o0oo46yfunction Queryinterface(const lID: TGUID: out obj):Integer; stdcall;IClass Factory interface(IUnknown)function AddRef: Integer; stdcallr00o0001-0000000c000000000006yfunction Release: Integer; stdcallfunction Createinstance(const unkOuter: IUnknown; constid: TIID: out obj): HResult: stdcall;可以看到, IUnknown聲明了三個(gè)方法: QueryInterfaceO,function Lock Server(f Lock: BOOL): HResult; stdcaAddRefo和_ Released。因?yàn)?IUnknown是COM對(duì)象的基本接口,所以所有的接口都必須實(shí)現(xiàn)這三個(gè)方法,這可以用手工完注的田且劍建一個(gè)和類工廠相關(guān)聯(lián)的成也可以讓vCL來代勞只要使類從 TInterfaceObject繼承就coM中國(guó)煤化工以控制這個(gè)對(duì)象的接口的可以了。CNMHG口的指針。值得注意的是我們永遠(yuǎn)不能通過接口來實(shí)現(xiàn)接口,只能通Delphi提供了兩個(gè)類來封裝COM對(duì)象和類工廠:TCo過類來實(shí)現(xiàn)。mobject和 TComObjectFactory。 TComObject包含了對(duì)Un2 GUIDkown和 TComObject創(chuàng)建的實(shí)例的支持; TComObjectFactory萬方數(shù)捨 nique identifier,全局惟一標(biāo)識(shí)符被賦予支持 Class Factory接口,并能夠創(chuàng)建 TComObject類的實(shí)例。GUID(Globally計(jì)算機(jī)時(shí)代2002年第10期4一個(gè)COM的具體例子begin當(dāng)實(shí)現(xiàn)一個(gè)COM應(yīng)用時(shí),應(yīng)該提供以下內(nèi)容:Len : MAX COMPUTERNAME LENGTH 1cOM接口:暴露給客戶的服務(wù)接口,以便客戶知道GetMem(S, Len)COM對(duì)象都提供了哪些服務(wù);COM服務(wù)器:包含COM對(duì)象代碼的模塊,一個(gè)COMResult: S對(duì)象可以實(shí)現(xiàn)多個(gè)接口;raise Exception. Create(Could not get computer name. )COM客戶:調(diào)用接口以便獲得COM服務(wù)器提供的服務(wù)客戶端知道要獲得哪種服務(wù),但不知道cOM服務(wù)器位于何這樣就實(shí)現(xiàn)了 GetName方法(6)編譯并保存我們的工程然后點(diǎn)擊Run菜單中的下面我們就來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的例子。我們創(chuàng)建一個(gè)進(jìn)程內(nèi)ctive Server,以便在系統(tǒng)中注冊(cè)我們的COM服務(wù)器。的COM服務(wù)器,它可以取得計(jì)算機(jī)的名稱這項(xiàng)服務(wù)通過接口這樣COM服務(wù)器就創(chuàng)建完成了。我們可以發(fā)現(xiàn) Delphi給GetName來公布我們生成的文件中有 P SrvcDLL tlb, P_SrvcDLL_TLB. p1)創(chuàng)建GOM服務(wù)器P SrvcDLL, dl,其中, P SrvcDLL, tb是類型庫(可包含多個(gè)接打開 Delphi5,進(jìn)行以下操作口)文件, P_SrvcDLL_TLB. pas是類型庫的源文件,包含了(1)選 FileI Close All-關(guān)閉所有項(xiàng)目TsystemHelp和其他幾個(gè)重要的類的聲明 P SrvcDLL dll就是(2) File INew選 ActiveX頁中的 ActiveX Library,這可以我們的COM服務(wù)器了。讓 Delphi為我們生成cOM服務(wù)器代碼所在的模塊,這是一個(gè)2)創(chuàng)建cOM客戶DLL,把它以名字 P SrVcDLL保存;在Deph5中新建一個(gè)工程,在窗體上放置一個(gè) Label,3)Fe|New雙擊 ActiveX頁中的CoMO圖標(biāo),此個(gè)Edt,一個(gè) Button.。以 U_Client和 P_Client為名保存單元和時(shí)出現(xiàn) COM Object wizard,我們?cè)?ClassName中填入工程。然后點(diǎn)擊 Project菜單中的 Add To Project.,選項(xiàng)把SystemHelp,保留 Instancing和 Threading Model的默認(rèn)選項(xiàng)P SrvcDLL TLB添加到工程中來,在窗體對(duì)應(yīng)的單元的UesDescription填入“ COM Programming in Delphi is so easy子句中添加 P SrvcDLL TLB,這樣我們就可以使用剛才創(chuàng)建點(diǎn)擊“OK”,此時(shí)出現(xiàn) Type Library Editor,在這里我們可以編的COM服務(wù)器了。為窗體類 TForml添加私有變量Fsys輯COM對(duì)象暴露給它的客戶的接口。在左邊可以看到, Delpht temHelp: ISystemHelp,然后雙擊窗體上的Buon,為它的單擊給我們列出了接口和實(shí)現(xiàn)這個(gè)接口的類的名稱?,F(xiàn)在,我們?cè)谑录帉懭缦麓aISystemHelp”上點(diǎn)擊右鍵,選擇 New I Method,為接口添加方procedure TForm1. Button 1Click(Sender: TObject)法, Delphi把這個(gè)方法命名為 Method,我們把它改為GetName,然后點(diǎn)擊右邊的 Parameters頁簽,為 Return Type選FSystemHelp: CoSystemHelp Create取LPSTREdit1. Text FSystemHelp GetNam4)關(guān)閉 Type Library Editor,以USrc的名字保存剛剛生成的 UnitI單元類 CoSystemHelp由 Delphi自動(dòng)生成,它的聲明在單元(5)在U_Svc單元中, Delphi給我們生成的 TSystemHelp P_ SrVcDLL TLB中,它的 Create方法借助同一單元中聲明的的聲明如下:ISystemHelp的ⅢD來生成了所需要的COM對(duì)象然后調(diào)用這TSystemHelp= class(TTypedComobject, ISystemHelp個(gè)COM對(duì)象的 GetName方法來得到了計(jì)算機(jī)的名稱。最后保存并運(yùn)行我們的工程,點(diǎn)擊窗體上的Butn后,我function GetName: PChar: stdcall們發(fā)現(xiàn)計(jì)算機(jī)的名稱已經(jīng)出現(xiàn)在Edit中了,這說明我們的客戶和COM服務(wù)器已經(jīng)很好的開始工作了??梢钥吹? TsystemHelp從 TType Comobject繼承而來,并參考文獻(xiàn)實(shí)現(xiàn)了接口 ISystemHelp;編輯 U Svc單元中 renAme方法為(1潘愛民COM康理與用,隋隼幽社,199如下代碼:[2] Charlie Calvert. Delphi 4 Unleashed. Sams Publishing, 1999function TSystemHelp GetName: PChar;[3] Steve Teixeira, Xavier Pacheco. Delphi 5 Developers GuideLen: DWord4]中國(guó)煤化工Shepherd. ProgrammingS: PCharCNMHG C.歡迎訂閱歡迎來稿歡訓(xùn)刊堂廣告

論文截圖
版權(quán):如無特殊注明,文章轉(zhuǎn)載自網(wǎng)絡(luò),侵權(quán)請(qǐng)聯(lián)系cnmhg168#163.com刪除!文件均為網(wǎng)友上傳,僅供研究和學(xué)習(xí)使用,務(wù)必24小時(shí)內(nèi)刪除。