Excel 2010 64 Bit kann nicht .net-Objekt erstellen
-
02-10-2019 - |
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?
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