8

C++ で使用されている CLSID データ型とは何かを正確に知りたいのですが、それを Delphi で使用したいと考えています。

  • CLSIDとは何ですか?
4

2 に答える 2

9

CLSID は、COM オブジェクトを識別する GUID です。登録された COM オブジェクトをインスタンス化するには、その CLSID を知る必要があります。

通常、Delphi では、CoCreateInstance. 関数を呼び出して CLSID を渡すだけです。の宣言は、 の単純なエイリアスであるCoCreateInstance型を持つクラス ID パラメータを宣言します。それで、それらの1つを渡します。TCLSIDTGUID

以下は、Delphi のソースから引用した宣言です。

type
  TCLSID = TGUID;

function CoCreateInstance(const clsid: TCLSID; unkOuter: IUnknown;
  dwClsContext: Longint; const iid: TIID; out pv): HResult; stdcall;

CoCreateInstance私のコードベースから取られた への呼び出しの例:

const
  CLSID_WICImagingFactory: TGUID = '{CACAF262-9370-4615-A13B-9F5539DA4C0A}';

if not Succeeded(CoCreateInstance(CLSID_WICImagingFactory, ...)) then
  ...

別のインターフェイスを作成する可能性が高いため、そのインターフェイスを適切な CLSID に置き換える必要があります。

知っておく価値のあるもう 1 つの小さなトリックがあります。インターフェイス型を type のパラメーターとして渡し、TGUIDそのインターフェイス型に GUID がある場合、コンパイラは GUID に置き換えます。したがって、上記のコードは次のように書くこともできます。

type
  IWICImagingFactory = interface
    // this is the GUID of the interface, the CLSID
    [{ec5ec8a9-c395-4314-9c77-54d7a935ff70}] 
    ....
  end;

....

if not Succeeded(CoCreateInstance(IWICImagingFactory, ...)) then
  ...
于 2013-10-19T21:45:04.290 に答える
6

CLSID とは何ですか? クラス ID (CLSID) は、ソフトウェア アプリケーションまたはアプリケーション コンポーネントの一意の ID を表す 128 ビット (大きい) の数値です。通常は「{AE7AB96B-FF5E-4dce-801E-14DF2C4CD681}」のように表示されます。

CLSID は、ソフトウェアまたはソフトウェア コンポーネントの "社会保障番号" と考えることができます。

それらは何に使用されますか?CLSID は、「名前」を知らなくてもソフトウェア コンポーネントを識別するために Windows で使用されます。また、ソフトウェア アプリケーションがコンピュータ、ファイル、またはその他のアイテムを識別するために使用することもできます。

彼らはどこから来たのか?Microsoft は、これらの番号を生成する GUIDGEN.EXE というユーティリティ (プログラム) を提供しています。これらは、現在の時刻、ネットワーク アダプター アドレス (存在する場合)、およびコンピューター内のその他の項目を使用して生成されるため、2 つの数値が同じになることはありません。[1]

COM クラスは、OSF/DCE RPC [2]で定義されている UUID である CLSID によって命名されます。

2つの引用が引用されています

于 2013-10-19T21:46:00.170 に答える