Ce que je sais jusqu'à présent. COM crée un objet basé sur clsid. Ceci est un guid qui identifie de façon unique cette classe.
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
Cette classe est ensuite utilisée pour créer des objets. COM doit maintenant savoir où est la DLL qui contient cet objet COM. Dans mon cas particulier, le "serveur" qui expose l'objet COM est une DLL et sera "en cours". Nous précisons alors COM que dll « en cours » en ajoutant:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
COM doit également connaître le modèle de thread que l'objet serveur COM prend en charge. Le plus simple, le plus courant, et celui utilisé dans cet exemple est le « Appartement » modèle de thread:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
ThreadingModel = "Apartment"
Suivant est le ProgID. Ceci est similaire à la façon dont DNS est utilisé pour transformer un nom convivial en adresse IP. nous nous tournons ici un nom convivial "MyCoolLibrary.MyCoolControl"
dans le CLSID laid "{AE8530CF-D204-4877-9CAB-F052BF1F661F}"
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
ThreadingModel = "Apartment"
HKEY_CLASSES_ROOT
\MyCoolLibrary.MyCoolControl
\Clsid
(default) = "{AE8530CF-D204-4877-9CAB-F052BF1F661F}"
Maintenant, quelqu'un peut demander
MyCoolLibrary.MyCoolControl
et COM peut le transformer en le ClassID
{AE8530CF-D204-4877-9CAB-F052BF1F661F}
Une fois COM a clasid, il peut alors chercher dans le registre sous HKCR\Clsid\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
pour trouver l'information réelle.
Pour le plaisir, le ProgID est ajouté à la section Clsid, juste pour que les gens peuvent avoir une certaine idée de ce que cette classe est:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
ThreadingModel = "Apartment"
\ProgID
(default) = "MyCoolLibrary.MyCoolControl"
HKEY_CLASSES_ROOT
\MyCoolLibrary.MyCoolControl
\Clsid
(default) = "{AE8530CF-D204-4877-9CAB-F052BF1F661F}"
Suivant est la bibliothèque de type. C'est en général un important pour tout ce qui est en cours de traitement, mais si l'objet COM est dans un autre "appartement", alors les paramètres de fonction doivent être rassemblés. COM le fait automatiquement pour vous s'il dispose d'une bibliothèque de types qui définit toutes les méthodes de classes.
La section CLSID est pointée vers la bibliothèque de type approprié avec l'ajout d'une clé TypeLib:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
ThreadingModel = "Apartment"
\ProgID
(default) = "MyCoolLibrary.MyCoolControl"
\TypeLib
(default) = "{17A5A3D4-439C-4C2A-8AB4-749B7771CDE1}"
HKEY_CLASSES_ROOT
\MyCoolLibrary.MyCoolControl
\Clsid
(default) = "{AE8530CF-D204-4877-9CAB-F052BF1F661F}"
Informations sur cette bibliothèque de type est également stockée dans le registre, mais l'ajout de ces clés est fait pour nous avec un appel au RegisterTypeLib. Mais il ajoutera des clés pour nous semblable à:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
ThreadingModel = "Apartment"
\ProgID
(default) = "MyCoolLibrary.MyCoolControl"
\TypeLib
(default) = "{17A5A3D4-439C-4C2A-8AB4-749B7771CDE1}"
HKEY_CLASSES_ROOT
\MyCoolLibrary.MyCoolControl
\Clsid
(default) = "{AE8530CF-D204-4877-9CAB-F052BF1F661F}"
HKEY_CLASSES_ROOT
\TypeLib
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\1.0
(default) = "My Cool ActiveX Library"
...
Maintenant, nous entrons dans les choses difficiles, des choses qui est nécessaire pour , espérons- faire un travail de contrôle ActiveX.
An MSDN article states que vous devez ajouter une factice clé programmable pour indiquer qu'il est un contrôle ActiveX:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\Programmable
Mais this MSDN Library page dit le mot-clé est contrôle, et non programmable - et il est non Clé programmable.
Mais cela n'empêche pas certains ActiveX d'utiliser Control, certains utilisant Programmable, d'autres utilisant les deux.
Je ne trouve rien qui mentionne autre chose. Donc, quelqu'un peut-il trouver une documentation définitive?
Je suis un développeur COM, un débutant un. J'ai la même question. Je voudrais partager [ceci] (http://ewall.org/index.php?module=ContentExpress&func=print&ceid=22) avec vous. – smwikipedia
La plupart des frameworks n'automatisent pas la génération de ceci pour vous? – Deanna