Quello che so finora. COM crea un oggetto basato su di esso è clsid. Questo è un guid che identifica in modo univoco quella classe.
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
Questa classe viene quindi utilizzata per creare oggetti. La COM ora ha bisogno di sapere dov'è la DLL che contiene quell'oggetto COM. Nel mio caso particolare, il "server" che espone l'oggetto COM è una DLL e sarà "in elaborazione". Abbiamo poi segnala COM a quella dll "in-process", aggiungendo:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
COM ha anche bisogno di conoscere il modello di threading che l'oggetto server COM supporta. Il più semplice, più comune, e quello utilizzato in questo esempio è il "appartamento" modello di threading:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
ThreadingModel = "Apartment"
prossima è il ProgID. Questo è simile al modo in cui il DNS viene utilizzato per trasformare un nome descrittivo in un IP. Qui ci rivolgiamo un nome "MyCoolLibrary.MyCoolControl"
nella brutta 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}"
Ora qualcuno può chiedere
MyCoolLibrary.MyCoolControl
e COM può trasformare che in ClassID
{AE8530CF-D204-4877-9CAB-F052BF1F661F}
volta COM ha la clasid, può quindi cercare nel registro sotto HKCR\Clsid\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
per trovare le informazioni reali.
Per il divertimento, il ProgID è aggiunto alla sezione Clsid, solo così la gente può avere qualche idea di cosa questa classe è:
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}"
successivo è la libreria dei tipi. Questo è principalmente un importante per qualsiasi processo in corso, ma se l'oggetto COM si trova in un altro "appartamento", è necessario eseguire il marshalling dei parametri di funzione. COM lo fa automaticamente per te se ha una libreria dei tipi che definisce tutti i metodi delle classi.
La sezione CLSID è puntato alla libreria dei tipi appropriata con l'aggiunta di una chiave 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}"
Le informazioni su questa libreria dei tipi viene memorizzato anche nel Registro di sistema, ma l'aggiunta di questi tasti è fatto per noi con una chiamata a RegisterTypeLib. Ma sarà aggiungere le chiavi per noi simile a:
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"
...
Ora entriamo la roba difficile, roba che è necessario per spera fa un lavoro di controllo ActiveX.
An MSDN article states che è necessario aggiungere un manichino programmabile chiave per indicare che si tratta di un controllo ActiveX:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\Programmable
Ma this MSDN Library page dice la parola chiave è controllo, e non programmabile - e non v'è nessuna chiave programmabile.
Ma ciò non impedisce ad alcuni ActiveX di utilizzare Control, alcuni di quelli programmabili e altri di entrambi.
Non riesco a trovare nulla che menzioni qualsiasi altra cosa sia richiesta.
Quindi, qualcuno può trovare qualche documentazione definitiva?
Sono uno sviluppatore COM, un novizio uno. Ho la stessa domanda. Mi piacerebbe condividere [questo] (http://ewall.org/index.php?module=ContentExpress&func=print&ceid=22) con voi. – smwikipedia
La maggior parte dei framework non ne automatizza la generazione per te? – Deanna