Le problème avec (beaucoup, beaucoup) de suggestions d'exploration du registre est que:
- il y a plus d'un emplacement de registre, vous devez regarder
- une classe peut être enregistré et ne pas exister dans le registre
Registration-free COM permet une classe d'être disponible sans elle être r inventé. Conceptuellement, vous ne voulez pas savoir si une classe est "registered", vous voulez simplement savoir si elle est suffisamment enregistrée pour être créée.
Malheureusement, la seule (et le meilleur) façon de le faire est de le créer:
//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;
averti que cela ne signifie pas la OCX réelle est sur le disque et au bon endroit. Et même alors, cela ne signifie pas que l'ocx peut être chargé sans problèmes. Et puisqu'il y a enregistrement free com (http://msdn.microsoft.com/en-us/library/ms973913.aspx) il ne dit pas non plus si l'ocx est potentiellement utilisable. –