COM: Laufzeitfehler 432: Datei oder Klassenname während Automatisierungsoperation nicht gefunden

23/06/2011 - 15:38 von Jens Müller | Report spam
Hallo,

ich nutze von meiner Anwendung aus eine registrierte DLL einer
Drittanwendung (early binding). Plötzlich (vermutlich durch Update der DLL)
erhalte ich nun das Problem, dass ich das Objekt zwar erstellen kann, aber
bestimmte Operationen erzeugen den Laufzeitfehler 432: Datei oder
Klassenname wàhrend Automatisierungsoperation nicht gefunden.

Code ist in etwa folgender - der Fehler tritt in der For Each Zeile auf.
Dim WithEvents dProf as ...

Set dProf = new ...
Dim aDoc As Document
For Each aDoc In dProv.Documents
...
Next

dProv.Documents sowie der Type Document ist im ObjektManager sichtbar, auch
an der DLL soll von der Schnittstelle her nichts geàndert worden sein.

Ich habe Olaf's regfree-Version versucht, aber das hilft auch nichts, hier
tritt der Fehler "429: Objekterstellung durch ActiveX-Komponente nicht
möglich" in der selben Zeile auf.

Was kann hier passieren?

Danke,
Jens
 

Lesen sie die antworten

#1 Schmidt
23/06/2011 - 16:33 | Warnen spam
Am 23.06.2011 15:38, schrieb Jens Müller:

ich nutze von meiner Anwendung aus eine registrierte DLL einer
Drittanwendung (early binding). Plötzlich (vermutlich durch Update der
DLL) erhalte ich nun das Problem, dass ich das Objekt zwar erstellen
kann, aber bestimmte Operationen erzeugen den Laufzeitfehler 432: Datei
oder Klassenname wàhrend Automatisierungsoperation nicht gefunden.

Code ist in etwa folgender - der Fehler tritt in der For Each Zeile auf.
Dim WithEvents dProf as ...

Set dProf = new ...
Dim aDoc As Document
For Each aDoc In dProv.Documents
...
Next



Was passiert (bzw. wo tritt der Fehler auf),
wenn Du das mal ànderst zu:

Dim V As Variant, aDoc As Document
For Each V In dProv.Documents
Set aDoc = V 'explizites Casting
'...
Next

Hintergrund für den Test ist, ob dProv.Documents
überhaupt ein IEnumVariant-Interface zurückliefert.
Enumeriert wird von diesem Interface ja zunàchst
immer über einen zurückgegebenen Variant -
VB veranstaltet (unter der Haube) immer dann
automatisch ein Casting auf den konkreten ObjektType,
wenn die Enumerations-Variable selbst nicht vom Typ
Variant ist.

Das Code-Schnipsel oben verlagert also den impliziten
Cast aus der "For Each Zeile" nach "eine Zeile tiefer",
so dass man jetzt besser sehen kann, ob die Enumeration
bereits bei der Rückgabe des IEnumVariant-Interfaces
ins Schleudern kommt (dann tràte der Fehler weiterhin
in der For Each Zeile auf), oder erst beim casten der
enumerierten Variant-Variable auf den konkreten Objekt-
Typ.

Falls letzteres der Fall ist, dann könntest Du mittels
TypeName(V) mal reinschauen, was da eigentlich angeliefert
wird von der Enumeration.

Olaf

Ähnliche fragen