Frage

Ich habe gerade ein Update auf eine DLL, die von VBA in Powerpoint aufgerufen wird. Alle Entwicklung ging in Ordnung, aber wenn ich auf einer anderen Benutzer Maschine zu implementieren versucht, bekomme ich ein Problem, dass ich keine Ahnung, wie zu debuggen habe.

Was passiert, ist, dass, wenn das .NET-Objekt in der VBA erstellt wird, dass der Verweis zurückgegeben wird auf das falsche Objekt ist, so dass die nächste Zeile nicht mit der Methode nicht gefunden.

Dim myObj As Foo.Bar

Public Sub RefreshData()

//'instantiate object
Set myObj = New Foo.Bar   
//'call a method
myObj.HelloWorld

Die letzte Zeile nicht mit Laufzeitfehler ‚438‘ Objekt unterstützt diese Eigenschaft oder diese Methode unterstützt , die dadurch verursacht wird, dass myObj irgendwie vom Typ „Wrong.Type“ ist statt "Foo.Bar".

„Wrong.Type“ ist auch in der Montage, so dass ich etwas davon ausgehen, läuft falsch mit der Art Bibliothek, aber ich habe versucht, zu regenerieren (mit regasm / Code-Basis / TLB MYLIB.DLL), und dies nicht geholfen hat.

Ich weiß nicht, wie diese weiter zu diagnostizieren. Hoffentlich jemand da draußen kann einige Schritte auf Liste, wie diese Art von Problem zu diagnostizieren?

War es hilfreich?

Lösung 2

In diesem Fall wird der Verweis auf die TLB-Datei zu entfernen, und dann das Hinzufügen erneut das Problem gelöst

Leider habe ich nie eine allgemeine Lösung, oder eine Erklärung für das Verhalten finden.

Andere Tipps

Es könnte das Problem der automatisch generierten GUIDs (Klasse, Interface, Typ-Bibliothek) - wenn Sie die DLL geändert, geändert GUIDs. Da der alt TLB alte GUIDs verwendet, indem es Referenzierung, assoziiert man diese alten GUIDs mit Typnamen, so dass der Code an der Arbeit mit der neuen GUIDs gescheitert. Die meisten VB (6 und .NET-Code) I haben auf dieses Problem gestoßen, so dass, wenn Ihr DLL in VB geschrieben wird, ist es wahrscheinlich es (und Ihre Arbeit um unterstützt diese Theorie).

Wenn das das Problem ist, eine allgemeine Lösung ist, Satz GUIDs explizit, was ein wenig ärgerlich ist, wenn Sie viele Arten haben, da Sie ändern GUIDs angeblich sind als Ihre Version (en) zu ändern, und Sie‘ ll müssen es manuell tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top