Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Allgemein / Bugs / OCX

Type Mismatch durch OCX-Komponenten

Ich habe ein seltsames Problem mit unter VB5 erstellten Komponenten ("Type Mismatch"). Ich konnte die Ursache auf folgendes Beispiel reduzieren... Gegeben sind folgende Projekte:
1. MyControlLib.OCX mit MyControl.Ctl:
   (leer)

2. MyClassLib.DLL mit MyClass.Cls:

   Dim ctl As MyControlLib.MyControl

   Public Sub Init(ByRef aControl As Object)
     Set ctl = aControl   '<-- hier Problem!?!?!
   End Sub

3. MyProject.EXE mit MyForm.Frm:

a) Auf der Form ein MyControl mit Namen "ControlX"
   anlegen.

b) Dim MyClassX As MyClassLib.MyClass

   Private Sub Form_Load()
     Set MyClassX = New MyClassLib.MyClass
     MyClassX.Init ControlX
   End Sub
Wenn ich das Programm ablaufen lasse (egal ob kompiliert oder in der Laufzeitumgebung) gibt es keine Fehlermeldung. Wenn ich das Programm auf andere Rechner installiere, dann läuft die kompilierte Version auch. Starte ich die Quelltexte von MyProject.VBP und MyClassLib.VBP unter VB5 (als Projektgruppe), so ist auch alles OK.

Starte ich auf anderen Rechnern das Programm MyProject.VBP im Quelltext (wobei MyClassLib.DLL und MyControlLib.OCX via Referenzen/Komponenten ordnungsgemäß angemeldet sind), so erhalte ich die Fehlermeldung "Type Mismatch"! Bei mir läufts in jeder Kombination!!! Warum?

VB erzeugt zu jeder OCX-Datei eine Schale (den sogenannten Extender, welcher u.a. die Positionseigenschaften wie Left, Top, ... enthält), um die Steuerelemente in der Entwicklungsumgebung auf ein Formular plazieren zu können. Diese Schale (manifestiert als OCA-Datei) wird für jeden Rechner neu generiert und erhält daher jeweils eine andere CLSID (der Schlüssel in der Registry). Daher kommt es also zu dieser irreführenden Fehlermeldung.

Mögliche Lösung: Die OCA-Datei für Entwickler mitliefern und von Hand in die Registry eintragen, so daß VB keine neue OCA-Datei erzeugen muß (unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Visual Basic\5.0" muß dabei u.a. die CLSID mit Versionsnummer eingetragen werden).
Mit Unterstützung von Francesco Balena (VB-2-the-Max).

© Jost Schwider, 30.04.2000-30.04.2000 - http://vb-tec.de/ocx.htm