レジストリのクロールに関する (非常に多くの) 提案の問題点は次のとおりです。
- 確認する必要があるレジストリの場所が複数あります
- クラスは登録できますが、レジストリには存在しません
登録不要の COMでは、登録しなくてもクラスを使用できます。概念的には、クラスが「登録済み」かどうかを知りたいわけではなく、作成するのに十分なほど登録されていることを知りたいだけです。
残念ながら、それを行う唯一の (そして最良の) 方法は、それを作成することです:
//Code released into public domain. No attribution required.
function IsClassRegistered(const ClassID: TGUID): Boolean;
var
unk: IUnknown;
hr: HRESULT;
begin
hr := CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IUnknown, {out}unk);
unk := nil;
Result := (hr <> REGDB_E_CLASSNOTREG);
end;