Was ich bisher weiß. COM erstellt ein Objekt basierend auf clsid. Dies ist eine GUID, die diese Klasse eindeutig identifiziert.
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
Diese Klasse wird dann zum Erstellen von Objekten verwendet. COM muss nun wissen, wo die DLL das COM-Objekt enthält. In meinem speziellen Fall ist der "Server", der das COM-Objekt freigibt, eine DLL und wird "in Bearbeitung" sein. Wir weisen dann COM auf dieses "in-process" dll durch Zugabe:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
COM muss auch das Threading-Modell wissen, dass das COM-Server-Objekt unterstützt. Die einfachste, am häufigsten, und der in diesem Beispiel verwendet wird, ist das „Apartment“ Threading-Modell:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
ThreadingModel = "Apartment"
Als nächstes ist die Programm-ID. Dies ist ähnlich wie DNS verwendet wird, um einen benutzerfreundlichen Namen in eine IP zu verwandeln. Hier wenden wir uns einen Namen ein "MyCoolLibrary.MyCoolControl"
in die hässliche clsid "{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}"
Jetzt kann jemand fragen Sie nach
MyCoolLibrary.MyCoolControl
und COM kann man erkennen, biegen Sie in die ClassID
{AE8530CF-D204-4877-9CAB-F052BF1F661F}
Sobald COM das hat clasid kann es dann in der Registry unter HKCR\Clsid\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
nach den richtigen Informationen suchen.
Für Spaß ist die ProgID zu dem CLSID-Abschnitt hinzugefügt, nur damit die Menschen eine Vorstellung haben, was diese Klasse ist:
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}"
Als nächstes ist die Typ-Bibliothek. Dies ist meistens un wichtig für alles In-Prozess, aber wenn das COM-Objekt in einer anderen "Wohnung" ist, dann müssen Funktionsparameter gemarshallt werden. COM tut dies automatisch für Sie, wenn es eine Typbibliothek hat, die alle Methoden der Klasse definiert.
Der CLSID-Abschnitt wird in der entsprechenden Typenbibliothek mit dem Zusatz eines TypeLib-Schlüssel hingewiesen:
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}"
Informationen über diese Art Bibliothek auch in der Registrierung gespeichert wird, aber diesen Schlüssel Zugabe ist für uns getan mit ein Anruf an RegisterTypeLib. Aber es fügt Schlüssel für uns ähnlich wie:
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"
...
Jetzt kommen wir in die heikelen Sachen, Sachen, die hoffentlich zu benötigt wird ein ActiveX-Steuerelement funktioniert.
An MSDN article states, dass Sie einen Dummy-Programmierbare Schlüssel hinzufügen müssen, um anzuzeigen, dass es sich um ein ActiveX-Steuerelement ist:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\Programmable
Aber this MSDN Library page sagt das Schlüsselwort Kontrolle und nicht Programmierbare ist - und es ist kein programmierbarer Schlüssel.
Aber das hindert einige ActiveX's nicht daran, Control zu verwenden, einige verwenden Programmable und andere verwenden beides.
Ich kann nichts finden, das irgendetwas anderes erwähnt, das benötigt wird.
Kann also jemand eine definitive Dokumentation finden?
Ich bin ein COM-Entwickler, ein Neuling ein. Ich habe die gleiche Frage. Ich möchte [this] (http://ewall.org/index.php?module=ContentExpress&func=print&ceid=22) mit Ihnen teilen. – smwikipedia
Automatisieren die meisten Frameworks die Generierung nicht für Sie? – Deanna