Доступ к типам приложений VSTO-addin из VBA (Excel)

У нас есть приложение VSTO-addin (а ​​не document-addin) для Excel, и мы хотим выставить событие в код VBA, чтобы макрос VBA мог выполнять некоторые действия, когда это событие срабатывает в addin. Как я могу получить код VBA для подписки на событие, определенное в приложении VSTO-addin?

Я бы подумал, что, поскольку аддон загружен в процесс Excel, это не должно быть слишком сложным, но еще не найти пути.

BTW, используя VS 2008 и Excel 2007.

Спасибо!

Ответы

Ответ 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