我目前已经成功地为一个APP实现了这个演示代码,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.
我的 Web 浏览器实际上并不是表单的一部分,因为我允许在我的应用程序中使用多个浏览器,因此 Browser 被声明为 TWinControl 并且如果满足 TWebBrowser 的条件,则它通过以下方式创建:
FBrowser := TWebBrowser.Create(nil);
并访问为:
(FBrowser as TWebBrowser)
我对 Com 函数还很陌生,那么我该如何找到相对于 TWebBrowser 的 ComServer?