Excel 2010 64 бит не может создать объект .NET
-
02-10-2019 - |
Вопрос
У меня есть простой класс библиотеки, которую я использую в Excel. Вот упрощение моего класса ...
using System;
using System.Runtime.InteropServices;
namespace SimpleLibrary
{
[ComVisible(true)]
public interface ISixGenerator
{
int Six();
}
public class SixGenerator : ISixGenerator
{
public int Six()
{
return 6;
}
}
}
В Excel 2007 я бы создал макроустановленную другую книгу и добавить модуль со следующим кодом:
Public Function GetSix()
Dim lib As SimpleLibrary.SixGenerator
lib = New SimpleLibrary.SixGenerator
Six = lib.Six
End Function
Затем в Excel я мог бы назвать функцию getsix (), и она вернет шесть. Это больше не работает в Excel 2010 64bit. Я получаю ошибку прохождения «429»: компонент ActiveX не может создать объект.
Я попытался изменять цель платформы на X64 вместо любого процессора, но, мой код не скомпилируется, если я не сфотографирую реестр для параметра COM Interop, это делает это так, чтобы мой макро-включенную рабочую книгу не сможет увидеть SimpleLibrary.dll, поскольку он больше не будет регрировать Отказ
Любые идеи, как я могу использовать мою библиотеку с Excel 2010 64 бита?
Решение
Вы подробно вы подробно описали, как ваша созданная ваша сборка .NET. Тем не менее, существует определенное количество шагов, необходимых для выставления сборки в COM:
Добавьте следующие атрибуты в свой код:
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; } } }
Ваша сборка должна быть подписана (Проект -> Свойства ... -> Подписание, создайте сильный файл ключа и установите флажок, чтобы подписать сборку
Следующая команда необходима для регистрации сборки (все в одной строке):
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe SimpleLibrary.dll /tlb SimpleLibrary.tlb /codebase
Это создает файл библиотеки типа .tlb, который вам придется ссылаться с вашего проекта VBA (Инструменты -> Ссылки -> Обзор ... В вашем редакторе VBA)
Отрегулируйте код VBA:
Public Function GetSix() Dim lib As SimpleLibrary.SixGenerator Set lib = New SimpleLibrary.SixGenerator GetSix = lib.Six End Function
Вы найдете шаги, описанные более подробно в этой статье в базе данных поддержки Microsoft:
Как вызвать Visual Basic .NET или Visual Basic 2005 сборка из Visual Basic 6.0