Ich habe eine DLL in C # mit dem .NET 3.0 Framework erstellt.
Unten ist der Code meiner DLL
%Vor%Ich versuche, diesen Code von Office 2003 VBA-Code auszuführen. Die DLL wurde mit der standardmäßigen Signierung von Visual Studio 2008 signiert.
Ich habe es geschafft, auf meine Assembly zu verweisen, indem ich eine .TLB-Datei mit
erstellt habe %Vor%Aber wenn ich eine Instanz des Objekts erstellen möchte:
%Vor%Ich erhalte den folgenden Fehler:
ActiveX-Komponente kann Objekt
nicht erstellen
Was mache ich falsch?
Der Computer, mit dem ich teste, hat .NET bis zum .NET 3.5-Framework installiert.
OK, nach einigen guten Ideen von Thorsten Dittmar habe ich endlich dieses Ding zum Laufen gebracht. Einige Dinge, die während unserer Diskussion auftraten und andere Dinge, die ich im Internet gefunden habe:
Stellen Sie in AssemblyInfo.cs sicher, dass Sie
festlegen[Assembly: ComVisible ( true )]
Thorsten wies darauf hin, dass Sie einen parameterlosen öffentlichen Konstruktor in Ihrer .NET-Klasse benötigen.
Registrieren Sie Ihre DLL auf dem Zielcomputer, indem Sie diesen Befehl ausführen. Der / codebase -Parameter schien für mich den Ausschlag zu geben. Der Pfad zur Typbibliothek (TLB) oder DLL spielt keine Rolle. Sie finden regasm unter C: \ Windows \ Microsoft.Net \ Framework \ v2.050727 \ RegAsm.exe
regasm c: \ Firmenname.Net.dll /tlb:CompanyName.Net.tlb / codebase
Referenzieren Sie die .tlb-Datei in Ihrem VBA-Editor mit Tools & gt; Referenzen.
Das sollte den Trick machen.
Ich habe auch meine Webrequest-Klasse aktualisiert, indem ich eine Schnittstelle für sie hinzugefügt habe, die IntelliSense Unterstützung in VB6 ermöglicht (was leider genug ist funktioniert nicht in VBA).
Sie benötigen einen expliziten, parameterlosen Konstruktor in Ihrer COM-Klasse. Ändern Sie Ihre Klassendefinition zu:
%Vor%Das sollte funktionieren.
Tags und Links .net c# vba dll access-vba