現在、このデモ コードを APP に正常に実装しました。 http://www.jasontpenny.com/blog/2010/03/23/custom-protocol-handler-in-delphi/ですが、申請書は、単一フォーム申請書です。
私が見つけたのは、次の CoGetClassObject に対して Factory が返されないことです。
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 を見つけるにはどうすればよいですか?