Ответ 1
VSTO - это не DLL, которую обычно можно вызывать из других DLL. VSTO - это, в основном, COM-компонент .NET, работающий изнутри оболочки, работающей из отдельного AppDomain. Хотя ваша надстройка VSTO технически представляет собой DLL, загружаемую в Excel, она работает скорее как EXE верхнего уровня, а не как библиотека DLL, доступная для других абонентов.
Лично я хотел бы создать стандартную сборку .NET, то есть избежать использования VSTO для этого - и выставить ее на COM с использованием правильных атрибутов. Этот процесс хорошо объяснен здесь: COM Interop Exposed - часть 2 в разделе "Выдача .NET-событий в COM".
Если вы действительно настаиваете на том, чтобы VBA мог вызывать VSTO, вам придется работать через свойство Office.COMAddIn.Object
, которое включено путем переопределения метода RequestComAddInAutomationService
. Этот процесс подробно обсуждается в статье надстройки VSTO, COMAddIns и RequestComAddInAutomationService от Andrew Whitechapel.
Надеюсь, это поможет!
Mike