Excel-DNA — это просто связующее звено между сборками Excel и .NET.
Если вы хотите повторно использовать функциональность, которая находится внутри сборки .NET, которая загружается надстройкой Excel-DNA (т. е. XLL
), вам не нужен XLL
ни для чего... сборка, которую загружает XLL
. Добавьте ссылку на эту в свое приложение .NET, и все готово... Точно так же, как и с любой другой библиотекой классов.
Другими словами, внутри вашего файла .dna
, который используется Excel-DNA для определения того, что загружать, у вас есть что-то вроде этого:
<DnaLibrary Name="Your Add-In" RuntimeVersion="v4.0">
<ExternalLibrary Path="YourAssembly.dll" ExplicitExports="false" ... />
</DnaLibrary>
YourAssembly.dll
уже представляет собой сборку .NET, содержащую функции, предоставляемые Excel-DNA.
Что еще более важно, если вы знаете, что у вас будут разные «клиенты» .NET для ваших функций, то вы должны спроектировать для этого, изолировать повторно используемые функции в выделенной сборке и иметь ссылку на сборку Excel-DNA, и выставить функции в Excel, вместо того, чтобы заставлять клиентов зависеть от сборок Excel-DNA.
e.g.
- Библиотека классов С#
Functions.dll
(ни на что не ссылается)
- Библиотека классов C#
ExcelAddIn.dll
(ссылки Functions.dll
)
- Приложение C#
MyCsApp.exe
(ссылки Functions.dll
)
- Библиотека классов C#
FunctionsComInterop.dll
(ссылки Functions.dll
)
- Приложение C++
MyCppApp.exe
(вызовы FunctionsComInterop.dll
)
- и т.п.
а>
В приведенном выше примере:
Functions.dll
не ссылается на какую-либо сборку Excel-DNA и не ничего не предоставляет через COM. Он должен иметь как можно меньше зависимостей (в идеале ни одного!)
ExcelAddIn.dll
создает мост к Excel-DNA и предоставляет функции Excel, которые могут вызываться Excel через Excel-DNA. Эти функции просто пересылают вызовы сборке Functions.dll
... Ничего более.
FunctionsComInterop.dll
создает мост к C++ и предоставляет функции COM, которые могут вызываться приложением C++. Эти функции просто перенаправляют вызовы на сборку Functions.dll
... Ничего более.
person
C. Augusto Proiete
schedule
04.10.2018