Frage

Ich habe eine einfache Klassenbibliothek, die ich in Excel verwenden. Hier ist eine Vereinfachung meiner Klasse ...

using System;
using System.Runtime.InteropServices;

namespace SimpleLibrary
{
 [ComVisible(true)]
 public interface ISixGenerator
 {
  int Six();
 }

 public class SixGenerator : ISixGenerator
 {
  public int Six() 
  {
   return 6; 
  }
 }
}

In Excel 2007 Ich würde ein Makro aktiviert Arbeitsmappe erstellen und ein Modul mit dem folgenden Code hinzu:

Public Function GetSix()
    Dim lib As SimpleLibrary.SixGenerator
    lib = New SimpleLibrary.SixGenerator
    Six = lib.Six
End Function

Dann in Excel konnte ich die Funktion getsix () aufrufen, und es würde sechs zurück. Dies funktioniert nicht mehr in Excel 2010 64bit. Ich erhalte einen Laufzeitfehler ‚429‘:. ActiveX-Komponente kann Objekt nicht erstellen

Ich habe versucht, die Plattform Ziel x64 statt Any CPU ändern, aber dann würde mein Code nicht kompilieren, wenn ich das Register Interop Option für COM nicht angehakt, damit macht es so meine Makro-Arbeitsmappe aktiviert SimpleLibrary.dll nicht sehen, wie es ist nicht mehr Für registriert.

Irgendwelche Ideen, wie ich meine Bibliothek mit Excel verwenden kann 2010 64-Bit?

War es hilfreich?

Lösung

Sie haben nicht im Detail beschrieben, wie die Assembly .NET erstellt. Allerdings gibt es eine bestimmte Anzahl von Schritten erforderlich die Montage zu COM belichten:

  • Fügen Sie die folgenden Eigenschaften, um Ihren Code:

    using System;
    using System.Runtime.InteropServices;
    
    namespace SimpleLibrary
    {
        [ComVisible(true)]
        [Guid("71F645D0-AA78-4447-BA26-3A2443FDA691")]
        public interface ISixGenerator
        {
            int Six();
        }
    
        [ComVisible(true)]
        [ProgId("SimpleLibrary.SixGenerator")]
        [Guid("8D59E0F6-4AE3-4A6C-A4D9-DFE06EC5A514")]
        [ClassInterface(ClassInterfaceType.AutoDispatch)]
        public class SixGenerator : ISixGenerator
        {
            [DispId(1)]
            public int Six()
            {
                return 6;
            }
        }
    }        
    
  • Ihre Montag unterzeichnet werden muss ( Projekt -> Eigenschaften ... -> Anmelden , eine starke Schlüsseldatei erstellen und das Kontrollkästchen um die Anordnung zu unterschreiben

  • Der folgende Befehl ist notwendig, um die Baugruppe (alle in einer Zeile) zu registrieren:

    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe 
                      SimpleLibrary.dll /tlb SimpleLibrary.tlb /codebase
    

    Dies schafft eine TLB-Typ-Bibliotheksdatei, die Sie anhand von Ihrem VBA-Projekt haben werden ( Extras -> Referenzen -> Browse ... in Ihrem VBA-Editor)

  • Stellen Sie den VBA-Code:

    Public Function GetSix()
        Dim lib As SimpleLibrary.SixGenerator
        Set lib = New SimpleLibrary.SixGenerator
        GetSix = lib.Six
    End Function
    

Sie werden die Schritte im Detail in diesem Artikel auf Microsoft-Support-Datenbank beschrieben finden:

Wie 2005 ein Visual Basic .NET oder Visual Basic nennen Montage von Visual Basic 6.0

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