次の方法で共有


GUID の作成と最適化

インターフェイス識別子 (IID) のような CLSID は GUID であるため、誰が記述しても、他のクラスには CLSID が重複しません。 サーバー実装者は、通常、CoCreateGuid 関数を使用して CLSID を取得します。 この機能は独自のCLIDを生成することが保証されているため、世界中のサーバー実装者は、他の人が書いたソフトウェアとの偶発的な衝突を恐れずに、独自にソフトウェアを開発して展開することができます。

一意の CLSID を使用すると、基になる実装で使用される名前に CLSID が接続されないため、クラス間で名前の競合が発生する可能性が回避されます。 たとえば、2 つの異なるベンダーが "StackClass" という名前のクラスを記述できますが、それぞれが一意の CLSID を持っているため、混同できません。

COM では、GUID (IID と CLSID) を他の値の任意の大きなセットにマップする必要があります。 アプリケーション開発者は、連続する値のブロックとしてアプリケーションの GUID を生成することで、このような検索を高速化し、システムパフォーマンスを向上させることができます。

連続する GUID のブロックを生成する最も効率的な方法は、-n スイッチと -x スイッチを使用して uuidgen ユーティリティを実行することです。このスイッチでは、最初の DWORD 値がそれぞれ 1 ずつインクリメントされる UUID のブロックが生成されます。

たとえば、次のように入力するとします。

uuidgen -n5 -x する

uuidgen ユーティリティは、次のような UUID のブロックを生成します。

12340001-4980-1920-6788-123456789012
12340002-4980-1920-6788-123456789012
12340003-4980-1920-6788-123456789012
12340004-4980-1920-6788-123456789012
12340005-4980-1920-6788-123456789012
 

プロジェクト全体の GUID を生成および追跡する方法の 1 つは、任意に多数の UUID のブロック (たとえば 500) の生成から始まります。 たとえば、次のように入力するとします。

uuidgen -n500 -x > guids.txt する

ユーティリティは 500 個の連続する UUID を生成し、指定されたテキスト ファイルに書き込みます。 その後、このファイルをソース ツリーにチェックインし、プロジェクトで使用されるすべての GUID に対して 1 つのリポジトリを提供できます。 プロジェクトの一部に GUID が必要な場合は、ファイルをチェックアウトし、必要な GUID をいくつでも取得し、取得済みとしてマークし、コード内の場所や使用している "仕様" に関するメモを残すことができます。

システム パフォーマンスの向上に加えて、このように連続する GUID のブロックを生成すると、次の利点があります。

  • アプリケーションのすべての GUID を含む中央ファイルを使用すると、どの GUID が何のために、どのユーザーが使用しているのかを簡単に追跡できます。
  • 特定のアプリケーションに関連付けられた連続する GUID のブロックは、開発者とテスト担当者がデバッグ中に内部 GUID を認識するのに役立ち、順番に格納されるため、システム レジストリで見つけやすくなります。

COM サーバーの責任