一個(gè)實(shí)際的OLE服務(wù)器的開發(fā):
文章導(dǎo)讀: 先行知識:Delphi/COM/OLEAutomation/SQLServer 難度:★★☆☆☆ 在前幾篇文章中我們已經(jīng)討論過關(guān)于VCL和OLE的知識。在這篇文章中我們將完成一個(gè)比較有實(shí)際意義的OLEAutomation服務(wù)器程序,最后我們把他們封裝為Delphi中使用的VCL組件。 首先我們來做一個(gè)實(shí)際的程序,在它沒有變?yōu)榉?wù)器之前,這是個(gè)用來管理客戶購買記錄的程序(它自己與SQLSe
先行知識:Delphi/COM/OLEAutomation/SQLServer 難度:★★☆☆☆ 在前幾篇文章中我們已經(jīng)討論過關(guān)于VCL和OLE的知識。在這篇文章中我們將完成一個(gè)比較有實(shí)際意義的OLEAutomation服務(wù)器程序,最后我們把他們封裝為Delphi中使用的VCL組件。 首先我們來做一個(gè)實(shí)際的程序,在它沒有變?yōu)榉?wù)器之前,這是個(gè)用來管理客戶購買記錄的程序(它自己與SQLServer連接),它可以錄入和刪除客戶的購買記錄并直觀的顯示出來,所有的數(shù)據(jù)都存放在SQLServer中。我們將它做為OLEAutomation出于這樣一種考慮,假設(shè)我們是一家大型的供貨公司,我們可能有很多系統(tǒng)需要使用這個(gè)客戶購買記錄程序并用它處理SQLServer中相應(yīng)的數(shù)據(jù),但我們不愿意每次都重復(fù)的編寫同樣的處理代碼,我們更希望能把這個(gè)處理程序獨(dú)立出來,并向其它程序提供服務(wù)。那么在下面的工作中我們完成了這個(gè)服務(wù)器程序,界面如下:(注意,這僅僅是一個(gè)例子,我們不評價(jià)其數(shù)據(jù)庫設(shè)計(jì)的好壞J) 我們不過多的討論這個(gè)程序的代碼(因?yàn)檫@和開發(fā)一般的程序沒有任何不同,你可以按照最后的地址給我來信索取這篇文章的全部代碼)。然后我們來把它變?yōu)橐粋€(gè)服務(wù)器。選擇FileàNewàOthersàActiveXàAutomationObject。接下來delphi為我們定義了類型庫和實(shí)現(xiàn)文件,我們要做的只是在類型庫中添加相應(yīng)的我們要用到的服務(wù)器屬性和事件。我們簡單的給出定義這個(gè)OLEAutomation功能的接口(來自類型庫所產(chǎn)生的ObjectPascal代碼): ICustFormOLE=interface(IDispatch) ['{D7AE75F9-F838-4702-A8EB-EAD0EED242DE}'] functionGet_CustName:WideString;safecall; procedureSet_CustName(constValue:WideString);safecall; functionGet_ProductName:WideString;safecall; procedureSet_ProductName(constValue:WideString);safecall; functionGet_ProductNum:Integer;safecall; procedureSet_ProductNum(Value:Integer);safecall; functionGet_Remark:WideString;safecall; procedureSet_Remark(constValue:WideString);safecall; //下面的方法和屬性都對應(yīng)著原程序中相應(yīng)的方法和屬性 procedureAddToData;safecall; procedureDelData;safecall; propertyCustName:WideStringreadGet_CustNamewriteSet_CustName; propertyProductName:WideStringreadGet_ProductNamewriteSet_ProductName; propertyProductNum:IntegerreadGet_ProductNumwriteSet_ProductNum; propertyRemark:WideStringreadGet_RemarkwriteSet_Remark; end;
|
新聞熱點(diǎn)
疑難解答