【发布时间】:2012-10-24 14:48:24
【问题描述】:
我目前已经成功地为一个应用程序实现了这个演示代码,http://www.jasontpenny.com/blog/2010/03/23/custom-protocol-handler-in-delphi/,但是它似乎只在应用程序是单表单应用程序时才有效。
我发现没有为 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 函数还很陌生,那么如何才能找到相对于 TWebBrowser 的 ComServer?
【问题讨论】:
-
等等,你用的是
TWebBrowser还是TChromium?您能否编辑您的问题以解决此问题(或描述它的含义)? -
这个问题是针对 TWebBrowser 的,即使我的应用程序可以支持 Chromium。关键问题是为 TWebBrowser 找到 ComService。
标签: delphi twebbrowser