Библиотека dll C# (с резьбой) из VBA

#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-объекта, вы можете передать этот тип.