Я создал оболочку COM. NET, которую я использую в VBA для запуска сборки. NET в Excel.
По какой-то причине я не могу использовать позднюю привязку для создания объектов из. NET COM dll.
Set obj = CreateObject("COMwrapper.MyClass")
Это выдает
Ошибка 429: компонент ActiveX не может создать объект
Однако он работает, если я:
- Использовать раннее связывание и ссылаться на COMwrapper.tlb
- Выполнить Excel с правами администратора
Проект COMwrapper. NET и его зависимости. NET Библиотеки DLL создаются с повышением Visual Studio 2019 до режима администратора, чтобы он мог зарегистрировать COMwrapper в процессе сборки .
Я также пытался создать решение с использованием VS как обычного пользователя, без регистрации оболочки COM. Позже я вручную запустил regasm.exe с правами администратора. Но это был тот же результат.
Если я загляну в реестр с RegDllView.exe (https://www.nirsoft.net/utils/registered_dll_view.html) , DLL-библиотека COMwrapper будет зарегистрирована с правильным путем.
Вот так я настроил COM-часть
Файл класса
namespace COMwrapper
{
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("904EBB3C-7A28-490E-B2E5-0CC0C66E907A")]
public class MyClass : IMyClass
Файл интерфейса
namespace COMwrapper
{
[Guid("540D119F-6676-4CE9-B763-50F4F2976E1E")]
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IMyClass
Ранее это работало нормально ! Если я распространяю библиотеки DLL на другой компьютер и регистрирую оболочку, она работает нормально с поздним связыванием.