DELPHI怎样编写COM组件
???????? 元旦閑來無事,學習一下DELPHI怎樣編寫COM組件.結果一試才發現問題多多,要么是找不到接口,要么是找不到方法.查了很多資料,發現說的都不清楚.現在把我所學到的和大家分享一下,希望新學的人能少走彎路.
???????? 1、什么是COM
???????? COM是微軟定的一種組件編寫的規范,目的是為了實現組件的重用,不管你是用C、DELPHI、VB什么語言寫的,只要遵守這種規范就是COM組件,就能相互之間調用。那這個規范是什么呢,最簡單的,就是按規定使用接口,微軟定了個IUnkown接口,只要實現了這個接口的類,就可以稱為COM組件。在此基礎上可以加上自己的接口,實現特定的功能,這就成了有用的COM組件了。
???????? 2、DELPHI中如何創建COM組件
???????? 兩個步驟:
???????? (1)創建一個ActiveX Library,這是個DLL
???????? (2)創建一個COM Object或者Automation Object,二者選其一,這兩者都是COM組件,但是當然還是有區別的,差在調用的方法上,這個后面再說
???????? 3、DELPHI中如何調用COM組件
???????? 兩種方法,分別是用接口來調和用名稱來調,第一種適用于支持接口的語言,如C、DELPHI,VB就不行了,好處是速度快,因為不用根據名稱去查找了,還有開發時編譯器能檢查,缺點是要導入類型庫。第二種適用于所有的語言,好處是不用導入類型了,缺點是調用的速度慢,還有開發時編譯器不檢查。
????????? 前面說的COM Object只能通過第一種方法調,Automation Object兩種方法都可以調。舉例如下:
?????????? 我創建了一個ActiveX Library,名叫mylib。一個Automation Object,名叫myobj。并且編譯注冊過了。
???????? 用第一種方法調用時,需要如下操作:在use里加上mylib_TLB類型庫(如果不是自己開發的沒有TLB可以從DLL導入生成的),代碼是var myobj:Imyobj;myobj=Comyobj.create();之后就可以用了。如果有興趣可以看看類型庫的代碼里,Comyobj.create里調用了CreateComObject,這函數返回的是IUnkown接口,再用as操作轉成你需要的Imyobj接口。
???????? 用第二種方法不需要類型庫了,代碼是var myobj:variant;myobj=CreateOleObject('mylib.myobj');之后就可以用了,這個方便吧。其實為了實現用名字調用,需要加上IDispatch接口,不過delphi都自動給我們加好了,不用管直接用就行。
總結
以上是生活随笔為你收集整理的DELPHI怎样编写COM组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: objective-c 使用NSNumb
- 下一篇: php上传文件简单类