DELPHI中如何編寫COM組件
元旦閑來無事,學(xué)習(xí)一下DELPHI怎樣編寫COM組件。結(jié)果一試才發(fā)現(xiàn)問題多多,要么是找不到接口,要么是找不到方法。查了很多資料,發(fā)現(xiàn)說的都不清楚?,F(xiàn)在把我所學(xué)到的和大家分享一下,希望新學(xué)的人能少走彎路
元旦閑來無事,學(xué)習(xí)一下DELPHI怎樣編寫COM組件。結(jié)果一試才發(fā)現(xiàn)問題多多,要么是找不到接口,要么是找不到方法。查了很多資料,發(fā)現(xiàn)說的都不清楚。現(xiàn)在把我所學(xué)到的和大家分享一下,希望新學(xué)的人能少走彎路。
什么是COM
COM是微軟定的一種組件編寫的規(guī)范,目的是為了實(shí)現(xiàn)組件的重用,不管你是用C、DELPHI、VB什么語言寫的,只要遵守這種規(guī)范就是COM組件,就能相互之間調(diào)用。那這個規(guī)范是什么呢,最簡單的,就是按規(guī)定使用接口,微軟定了個IUnkown接口,只要實(shí)現(xiàn)了這個接口的類,就可以稱為COM組件。在此基礎(chǔ)上可以加上自己的接口,實(shí)現(xiàn)特定的功能,這就成了有用的COM組件了。
DELPHI中如何創(chuàng)建COM組件
兩個步驟:
(1)創(chuàng)建一個ActiveX Library,這是個DLL。
(2)創(chuàng)建一個COM Object或者Automation Object,二者選其一,這兩者都是COM組件,但是當(dāng)然還是有區(qū)別的,差在調(diào)用的方法上,這個后面再說。
DELPHI中如何調(diào)用COM組件
兩種方法,分別是用接口來調(diào)和用名稱來調(diào),第一種適用于支持接口的語言,如C、DELPHI,VB就不行了,好處是速度快,因?yàn)椴挥酶鶕?jù)名稱去查找了,還有開發(fā)時編譯器能檢查,缺點(diǎn)是要導(dǎo)入類型庫。第二種適用于所有的語言,好處是不用導(dǎo)入類型了,缺點(diǎn)是調(diào)用的速度慢,還有開發(fā)時編譯器不檢查。
前面說的COM Object只能通過第一種方法調(diào),Automation Object兩種方法都可以調(diào)。舉例如下:
我創(chuàng)建了一個ActiveX Library,名叫mylib。一個Automation Object,名叫myobj。并且編譯注冊過了。
用第一種方法調(diào)用時,需要如下操作:在use里加上mylib_TLB類型庫(如果不是自己開發(fā)的沒有TLB可以從DLL導(dǎo)入生成的),代碼是var myobj:Imyobj; myobj:;之后就可以用了。如果有興趣可以看看類型庫的代碼里,里調(diào)用了CreateComObject,這函數(shù)返回的是IUnkown接口,再用as操作轉(zhuǎn)成你需要的Imyobj接口。
用第二種方法不需要類型庫了,代碼是var myobj:variant; myobj:CreateOleObject('');之后就可以用了,這個方便吧。其實(shí)為了實(shí)現(xiàn)用名字調(diào)用,需要加上IDispatch接口,不過delphi都自動給我們加好了,不用管直接用就行。