Index

CoClasses aus ActiveX Servern

COM

Problemstellung

Wer mit VB6 schonmal ein PlugIn System bauen wollte, bekam spätestens bei der Erkennung neuer PlugIns Probleme, angenommen, alle PlugIns wären mit VB erstellte ActiveX DLLs. Wenn der einzigste Weg, ein PlugIn zu laden, CreateObject() mit Prog ID wäre, wie sollte sichergestellt werden, dass die Prog ID korrekt ermittelt werden würde?
Und vor allem: Wie sollte sie ermittelt werden?
Genormt, oder über viel Gesuche in der Registry?
Viel praktischer wäre es doch, man könnte über den Dateinamen des PlugIns alle seine öffentlichen Klassen auslesen, um so an die korrekte Prog ID für das PlugIn zu gelangen.

Des Rätsels Lösung

Mit VB6 erstellte ActiveX DLLs/OCXs bringen eine eingebaute Type Library mit sich, in der alle öffentlichen Klassen und deren öffentliche Member eingetragen sind. Wenn man also diese Lib auslesen könnte, könnte man anhand der zurückgegebenen GUID für eine CoClass (öffentliche Klasse) deren Prog ID ermitteln und sie mit CreateObject() erstellen.

1. Type Library aus DLL/OCX mit oleaut32.LoadTypeLib() laden
2. Anzahl an Typen ermitteln, zu denen Infos bereitstehen
3. Alle auf den Typ "CoClass" überprüfen
4. Für gefundene CoClass die Prog ID über ole32.ProgIDFromCLSID() ermitteln

Download: CoClasses ermitteln

Was bisher geschah: