Problem z (wieloma, wieloma) sugestiami przeszukiwania rejestru że:
- istnieje więcej niż jedna lokalizacja rejestru trzeba by spojrzeć na
- klasa może być zarejestrowany i nie istnieje w rejestrze
Registration-free COM pozwala klasa będzie dostępna bez niego być r egistered. Koncepcyjnie nie chcesz wiedzieć, czy klasa jest "zarejestrowana", chcesz tylko wiedzieć, że jest wystarczająco zarejestrowana, aby ją utworzyć.
Niestety tylko (i najlepszym) sposobem na to jest, aby go utworzyć:
//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;
być ostrzeżony, że nie oznacza to rzeczywisty OCX jest na dysku i we właściwym miejscu. I nawet wtedy nie oznacza to, że ocx może być ładowany bez problemów. A ponieważ jest darmowa rejestracja (http://msdn.microsoft.com/en-us/library/ms973913.aspx), nie wiadomo też, czy ocx jest potencjalnie użyteczny. –