Gecko SDK for Delphi の使い方 サービス編

| コメント(2) | トラックバック(0)

今回はサービスの使い方について説明をする。 前回のコンポーネントとの違いは、サービスはプロセスの中でただ1つのインスタンスを持つ点だ。 ファイル関連で例に挙げると、 nsIFile は個別のファイルを操作するコンポーネントでファイルごとに違ったインスタンスを持つ必要があるが、 nsIDirectoryService は特殊ディレクトリの位置を得るサービスで、得られる情報はプロセスを通じて共通である。 この nsIDirectoryService を取得するコードは次のようになる。

var
  dirSrv: nsIDirectoryService;
begin
  NS_GetService('@mozilla.org/file/directory-service;1', nsIDirectoryService, dirSrv);
end;

この NS_GetService 関数のプロトタイプ宣言は以下のようになる。

function NS_GetService(const CID, IID: TGUID; out Intf): Longword; overload;
function NS_GetService(ContractID: PAnsiChar; const IID: TGUID; out Intf): Longword; overload;

引数は NS_CreateInstance 関数と同じなので、取り立てて説明することもないだろう。 サービスとコンポーネントの区別は、 ContractID やインターフェース名の末尾に 'Service' とついているかどうかでおこなう。

余談だが、ディレクトリサービスは今回のように nsIDirectoryService を使うことはまれで、 nsIProperties で取得するのが一般的である。 ほかにも多くのサービスが nsIProperties によるインスタンスの取得を許可しているようだ。

トラックバック(0)

トラックバックURL: http://nesitive.net/mt/tbping/5

コメント(2)

Hello!

I am trying to use your GeckoSDK in Delphi. But I get nil in "FBrowser" and "dirSrv" whenever I call these functions:

GRE_Startup;
NS_CreateInstance(NS_WEBBROWSER_CONTRACTID, nsIWebBrowser, FBrowser);
NS_GetService('@mozilla.org/file/directory-service;1', nsIDirectoryService, dirSrv);

Can you please help me? Arigato Gozaimasu

Thank you for using.
How about the result value of GRE_Startup function?
If the function returns a fault value, the SDK could not load Gecko.
You must do one of the followings:
1. Put your program on the directory of Mozilla or Seamonkey. (not Firefox or Thunderbird!)
2. Add the directory of Mozilla or Seamonkey to PATH.
3. Install GRE.

And thank you. See you.

コメントする

このブログ記事について

このページは、necottieがOctober 26, 2004 5:51 PMに書いたブログ記事です。

ひとつ前のブログ記事は「Gecko SDK for Delphi の使い方 コンポーネント編」です。

次のブログ記事は「Firefox 1.0 Release Candidate 1」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。