COM и Позднее связывание в Excel / VBA: компонент ActiveX не может создать объект - PullRequest
0 голосов
/ 20 февраля 2020

Я создал оболочку 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 на другой компьютер и регистрирую оболочку, она работает нормально с поздним связыванием.

1 Ответ

0 голосов
/ 20 февраля 2020

Не ответ, просто поддерживаю мой комментарий. Я создал библиотеку DLL в правах администратора на VS2019 и смог получить доступ через раннее и позднее связывание. Вот как я это настроил

enter image description here

...