程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> COM程序編寫入門(全文-3)

COM程序編寫入門(全文-3)

編輯:Delphi

COM對象的生存周期與IUnknown接口

COM對象的生存周期分為兩部分來講:客戶端與COM本身: 在客戶端,視定義的COM對象接口而定,像我們例子中的v_Obj,定義成全局變量,那麼COM對象在創建時產生,只有在程序退出時才被釋放。我們也可以在形式上將其釋放,如:v_Obj:=nil,這樣這個COM接口就無效了。 在COM本身,COM接口的通過記數的方式來完成COM的生存周期,為什麼采用記數,當然很簡單——因為COM可能同時被多個程序所調用。有一個程序連接到COM時計數器加1,某個釋放時計數器減1,當計數器為0時,COM對象才真正從內存中移除。 IUnknown接口:       為什麼將IUnknown接口與生存周期放在一起講是有原因的,COM生存周期中的計數器就定義在IUnknown接口中:AddRef、Release、QueryInterface。這三個接口也是IUnknown的全部身家。對三個接口還是解釋一下: AddRef:當COM產生一個客戶端連接的時候,AddRef方法負責將計數器加1; Release:當COM釋放一個客戶端連接的時候,Release方法負責將計數器減1,如果計數器為0,釋放COM; QueryInterface:因COM支持多個接口,QueryInterface負責找出用戶指定的接口以返回正確的VTable; 接口全局標識:        上面說到QueryInterface的時候,提到了要找到正確的接口。其實正確的接口就是靠全局標識符來識別的。它是一個128位的數字,是按照統計學的方法,計算出來的,可唯一標識出每個接口(理論上)。具體實現我們不用管,它產生的方法很簡單,在Delphi中按Ctrl+Shift+G就可以產生一個。

COM實現在Delphi中的實現

相信通過上面的介紹對COM應該也有了初步的認識了,現在就將點實際的東西,如何在Delphi下編寫COM。        在Delphi下面開發COM是比較容易的,Delphi封裝的COM開發的最基本的要素,只要你去編寫對象的實現類就行了,其他的全有Delphi搞定。 1、打開Delphi,選擇FileNewOthers,選擇Active頁的ActiveX Library,選擇FileNewOthers,選擇Active頁的COM Object,出現的向導中比較重要的選項如下: Class Name:實現類的名稱,自定。 Include Type Library:是否包含類型庫文件,如果不選擇,Delphi將不產生類型庫文件,應此上面輸入的Class Name也無效。也就意味著接口類、實現類、實現方法都的自己寫。對於不是很熟悉COM的的人員最好不要采用這種方式。 其它參數均可采用默認值,具體意義可參見有關資料。 2、接口的編寫 選擇VIEwType Library,選擇接口,右鍵New選擇Method,在右邊Attributes的Name中輸入接口的名稱,在Parameters中加入需要加入的輸入和輸出參數。注意:設置參數類型時,如果是返回參數的,參數類型後面要加上“*”。點擊刷新,在程序單元中就出現了剛定義的接口,在此編寫實現代碼就可以了。 3、COM的安裝 編寫完成後編譯,通過RunRegister ActiveX Server注冊編譯好的COM,通過RunInstall COM+ Objects安裝COM組件,在彈出的對話框中選擇接口,在接下來的對話框中可以選擇安裝到已有的COM應用程序中也可以安裝到新的COM應用程序中。這樣就完成了COM的安裝,你可以打開系統中的組件服務看到你所安裝的COM。 由於工作繁忙,沒能更加詳細的將個人的心得詳細描述出來,本人會陸續發表自己的心得與大家分享。朋友們有興趣的可以和我聯系; QQ:103222465 Email:[email protected]
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved