Führen Sie .NET 3.0-Code von Office 2003 aus

8

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.

    
Peter 04.11.2009, 11:21
quelle

2 Antworten

10

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:

  1. Das .NET Framework muss auf dem Zielrechner installiert sein.
  2. .Net-Programmability-Unterstützung muss auf dem Zielrechner installiert werden.
  3. Stellen Sie in AssemblyInfo.cs sicher, dass Sie

    festlegen
      

    [Assembly: ComVisible ( true )]

  4. Thorsten wies darauf hin, dass Sie einen parameterlosen öffentlichen Konstruktor in Ihrer .NET-Klasse benötigen.

  5. Stellen Sie sicher, dass Sie auf der Registerkarte "Eigenschaften" Ihres Projekts auf der Registerkarte "Erstellen" die Option "Registrieren für COM Interop" aktivieren.
  6. Stellen Sie sicher, dass Sie Ihr Projekt auf der Registerkarte "Signieren" auf der Seite "Eigenschaften" Ihres Projekts signieren.
  7. 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

  8. Referenzieren Sie die .tlb-Datei in Ihrem VBA-Editor mit Tools & gt; Referenzen.

  9. Ziehen Sie die DLL von C: \ zu Ihrem GAC unter C: \ Windows \ assembly \ (Ich habe das zunächst nicht bemerkt, aber offensichtlich ist es notwendig, dass Office Ihre Assembly findet.)

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

       
Peter 04.11.2009, 14:46
quelle
2

Sie benötigen einen expliziten, parameterlosen Konstruktor in Ihrer COM-Klasse. Ändern Sie Ihre Klassendefinition zu:

%Vor%

Das sollte funktionieren.

    
Thorsten Dittmar 04.11.2009 11:56
quelle

Tags und Links