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.
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