2012-10-24 82 views
0

的ComServer我現在實現了這個演示代碼爲APP成功地,http://www.jasontpenny.com/blog/2010/03/23/custom-protocol-handler-in-delphi/,但似乎如果應用程序是一個單一的形式應用程序才能正常工作。怎樣才能找到一個TWebBrowser異步可插入協議

我發現的是,沒有廠在返回CoGetClassObject:

procedure NewProtocolHandler(const aProtocolName: String; aProtocolCallback: TProtocolCallback; aProtocollType: TGUID); 
var 
    error : HRESULT; 
begin 
    if _protocol <> '' then 
     raise Exception.Create('Currently only supports a single asynchronous pluggable protocol'); 

    _protocol := aProtocolName; 
    _protocolCallback := aProtocolCallback; 

    error := CoGetClassObject(Class_AsyncPlugProto_Protocol, CLSCTX_SERVER, nil, IClassFactory, Factory); 
    CoInternetGetSession(0, InternetSession, 0); 
    InternetSession.RegisterNameSpace(Factory, Class_AsyncPlugProto_Protocol, PChar(_protocol), 0, nil, 0); 

    CoCreateInstance(aProtocollType, nil {was IUnknown(Self)}, CLSCTX_INPROC_SERVER, IUnknown, MyProtocol); 
end; 

,我已經開始相信,這是由於在初始化部分不正確的ComServer。

initialization 
    TComObjectFactory.Create(ComServer, TAsyncPlugProto, Class_AsyncPlugProto_Protocol, 'Protocol', '', ciMultiInstance, tmApartment); 
finalization 
    EndProtocolHandler; 
end. 

我的網頁瀏覽器實際上不是一種形式的一部分,我允許多個瀏覽器在我的應用程序中使用,所以瀏覽器被聲明爲TWinControl如果條件得到滿足的TWebBrowser其通過創建:

FBrowser := TWebBrowser.Create(nil); 

和訪問爲:

(FBrowser as TWebBrowser) 

我是相當新的COM函數,所以我怎麼能去尋找ComServer相對TWebBrowser?

+0

等待,讓您使用'TWebBrowser'或'TChromium'?你能編輯你的問題來解決這個問題嗎(或者描述它是什麼意思)? – TLama

+0

即使我的應用程序可以支持Chromium,這個問題也適用於TWebBrowser。關鍵問題是找到TWebBrowser的ComService。 –

回答

0

我想你混淆了一些事情。如果你想製作一個APP,如果你用幾種方法完成了一些COM對象的工作,這將會有所幫助。

的ComServer對象實際上是環繞一些,如果COM內部,準備在一個Delphi項目使用中央對象。由於Internet Explorer不是Delphi項目,因此您無法獲得ComServer。同樣,如果你仔細看看TWebBrowser對象,你會注意到它也是IWebBrowser2對象的COM內部封裝。

TWebBrowser和TChromium是兩個獨立的項目。 As是一個偉大的運營商,但它不能改變任何你想要的東西。

如果你想要一個APP的另一個例子看看這裏: http://xxm.svn.sourceforge.net/viewvc/xxm/trunk/Delphi/local/xxmHandler.pas?revision=235&view=markup

+0

因此,看起來我對ComServer的瞭解有點有缺陷,在兩個示例APP中,ComServer究竟是在引用什麼,如果它不是TWebBrowswer? 忽略這兩個瀏覽器,我只是指出的關鍵變量是萬一TWinControl這會對ComServer的效果。 (如果Chromium在應用程序中不加載,則將IE用作默認值)。 –

+0

Ahhh在問題中看到我的錯誤(FBrowser爲TChromium)本意是(FBrowser爲TWebBrowser),對不起,我很抱歉。 –

+0

原來它是不與APP的問題,但我的COM成立,會教我急於:)乾杯 –