Krasnoarmeec
@Krasnoarmeec

Как получить доступ к находящемуся в памяти объекту, инстанцированному в VBA, из VBScript?

Дано: есть зарегистрированная при помощи RegAsm C# dll, которая содержит класс Namespace1.Class1, видимая в VBA References как Namespace1.
Класс Class1 из dll инстанциируется в VBA как Public XXX As New Class1. Функции класса успешно вызываются из VBA, но для исполнения некоторых из них требуется до 30 секунд.

Надо: запустить длительные функции в фоновом режиме через исполнение внешнего VBScript, как это сделано здесь и обновлять прогресс бар каждую секунду.

Проблема в VBScript при попытке получить доступ к находящемуся в памяти объекту:
Set YYY = GetObject(, "Namespace1.Class1") не находит dll/Namespace/Class в памяти (800A01AD: "ActiveX component can’t create object"). Безуспешно перепробовал различные комбинации ("Class1", "Namespace1", "Namespace1_Class1") – вылезает та же ошибка.

Дополнительные сведения: 32 bit dll успешно вызывалась из VBA (Excel 64 bit) при помощи COM Surrogate.
VBScript запускается из VBA посредством:
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run """" & filename """"
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
honor8
@honor8
Принципы быстродействия VBA в описании
Изменить раннее связывание на позднее.* ** И не надо за памятью гоняться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы