ActiveX : notes




En visual Basic, pour avoir un pointeur sur l'interface :

Dim MyIP As Object
Set MuIP = CreateObject("MyApp.MyClass.1")

Ce qui est fait réellement et qu'on doit effectuer en C++ :
  1. (VB) Creation d'une variable de type Object "MyIP"
  2. (VB) Recherche MyApp.MyClass.1 dans le registre. Si trouvé, alors est extrait la valeur du CLSID.
  3. (VB) Appel à CoCreateInstance avec le CLSID du dessus.
  4. (COM) appel à CoGetClassObject avec le CLSID et l'IID (pour l'interface IDispatch). Ceci, si succès, fait que l'exécutable ou la DLL est chargé en mémoire et lancée.
  5. (Object) appel à CoRegisterClassObject qui dit à COM que la classe est dispo.
  6. (COM) appelle IClassFactory::CreateInstance avec l'IID. Si succès, un pointeur sur l'objet créé par IDispatch.
  7. (COM) appelle IClassFactory::Release pour libérer le pointeur sur l'objet de l'interface IClassFactory
  8. (VB) Stocke le pointeur d'interface IDispatch dans MyIP.