#c# #vba
Вопрос:
У меня есть библиотека dll C# с методами, которые должны называться 1. из ее пользовательского интерфейса для некоторых пользователей и 2. VBA для некоторых пользователей
Я установил проект «реестр COM-взаимодействия», зарегистрированный в Regasm, на который ссылаются из VBA, и создал объект, вызванный методом из модуля VBA. Это отлично работало как с VBA, так и с его пользовательским интерфейсом.
Теперь мне пришлось изменить метод, чтобы запустить его в отдельном потоке для какой-то другой обработки пользовательского интерфейса. Теперь код VBA не работает. Здесь нет никакой ошибки. Он просто возвращает модуль, но ничего не обрабатывается.
Есть ли способ дождаться завершения потока C# в VBA?
Ответ №1:
Убедитесь, что вы регистрируете компонент COM как для 32, так и для 64-разрядной версии.
%windir%Microsoft.NETFrameworkv4.0.30319regasm «Contoso.Interop.dll» /tlb:Contoso.Взаимодействие.tlb /кодовая база Contoso.Взаимодействие
%windir%Microsoft.NETFramework64v4.0.30319регазм «Contoso.Interop.dll» /tlb:Contoso.Взаимодействие.tlb /кодовая база Contoso.Взаимодействие
Изменить: Измените по мере необходимости и в соответствии с версией платформы.
Комментарии:
1. Спасибо! Это сработало! Кроме того, есть ли способ передать структуры из vba в C# в качестве параметра?
2. Я не совсем уверен. Если вы предоставляете тип C# в качестве Com-объекта, вы можете передать этот тип.