2012-06-09 43 views
1

我玩過一個第三方庫,可以通過COM接口訪問。
對於一些測試,我創建的主要形式爲:如何實現IDispatch方法?

TForm1 = class (TForm, IThirdParyCOMInterface) 

TForm1實現IThirdParyCOMInterface的所有方法,我也得到我需要的功能。

下一步是創建一個單獨的類來處理這個C​​OM接口。
做這樣的事情:

TMyClass = class (TInterfacedObject, IThirdParyCOMInterface) 

導致編譯器錯誤:

E2291缺少實現的接口方法IDispatch.GetTypeInfoCount
E2291缺少實現的接口方法的IDispatch.GetTypeInfo
E2291缺少實施的接口方法IDispatch.GetIDsOfNames
E2291缺少接口方法IDispatch.Invoke的實現

(IThirdPartyCOMInterface =接口(IDispatch接口))
似乎TForm的已經實現了這些IDispatch方法,但我的新的簡單類沒有。

我該如何爲像上面這樣的新課程做到這一點?
我應該從哪個類繼承我的新類,以便這些IDispatch方法已經實現?編號:
我剛剛找到TAutoIntfObject。那是我需要的嗎?
(COM是有點混亂給我,我只是猜測這裏)

回答

5

傳統的東西在COM的事,特別是如果你正在寫一個EXE程序,其功能如同一個自動化服務器(又名DCOM服務器)是將您的COM接口與表單分開。

即使在編寫普通的德爾福應用程序時,甚至在您不希望變成巨大的泥球時,也是如此。所以問問自己爲什麼你想讓FORM實現你的調度接口。即使是在一個快速而骯髒的演示中,將COM服務器類和Forms混合在一起也很有趣,你不需要這樣做。

雙接口(自動化)對象通常構建爲自己的類,它可以私下引用您的表單。我建議你看看這樣做。

IThirdPartyComInterface應該由您自己的類TThirdPartyComInterface實現,並且應該是一個雙COM(Native vtable + Dispatch)對象。

然後,您應該註冊您的COM服務器對象,並且您將開始業務。

有各種教程,但沒有看起來最新的。這裏有一個爲Delphi 7.

也許去最好的地方就是DocWiki它會告訴你COM對象嚮導,你應該使用以創建TThirdPartyComInterface類將實現你的IDispatch,加上本地的VTable COM(高性能)一次全部。你可以將IDispatch破解到你的TForm中,但是每當你這麼做的時候,我選擇的一個子神或者執行者會執行一個我選擇的小毛茸茸的動物。不要這樣做。想想你正在殺死的那些小毛茸茸的動物。

0

嘗試使用TAutoObject而不是TInterfacedObject。前者實施IDispatch,後者只實施IUnknown。 (它在ComObj單位)