GUID の作成と最適化

CLSID は、インターフェイス識別子 (IID) と同様に GUID であるため、誰が作成したかに関係なく、他のクラスは重複した CLSID を持つことはありません。 サーバー実装者は通常、CoCreateGuid 関数を使用して CLSID を取得します。 この関数は一意の CLSID を生成することが保証されているため、世界中のサーバー実装者は、他人が作成したソフトウェアと偶発的に衝突することを恐れることなく、独自にソフトウェアを開発および展開できます。

一意の 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 に単一のリポジトリを提供できます。 ユーザーはプロジェクトの自分の部分に GUID が必要なため、ファイルをチェックアウトして、必要なだけ GUID を取得し、取得済みとしてマークし、コードまたは「仕様」のどこで使用しているかについてメモを残すことができます。

この方法で連続した GUID のブロックを生成すると、システムのパフォーマンスが向上するだけでなく、次のような利点があります。

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

COM サーバーの責任