Среда: C #, .NET 3.5, Windows 7 64, Excel 2007, Visual Studio 2010
У меня VS2010 с 3 проектами:
Projet «Business»: Библиотека классов с глобальной статической переменной
List<BusinessClass>
Проект «Надстройка»: Расширяемая совместно используемая надстройка и класс надстройки:
[GuidAttribute("A9E83593-395F-4112-855D-A68C5088151F"), ProgId("eFrontCubeAddIn.CubeAddIn")]
public class CubeAddIn : Object, Extensibility.IDTExtensibility2, ICustomTaskPaneConsumer {…}
Excel вызовет OnConnection, и я буду использовать объект Excel (приложение ExcelApp = (Excel.Application);) для взаимодействия.Все взаимодействия внутри надстройки осуществляются через COM (InvokeMember).List<BusinessClass>
создается и заполняется из «Надстройки»
Проект «Формулы»: Библиотека классов.Одна UDF Excel специфическая формула.Методы создаются с использованием следующей модели и регистрируются с использованием [ComRegisterFunctionAttribute] RegisterFunction (Type type)…
[Guid("5268ABE2-9B09-439d-BE97-2EA60E103EF6")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class MyFunctions {
public double MyUdfFunction(double number1, double number2) {
{
return number1 * number2;
}
Моя проблема очень проста для объяснения: у меня есть лента и настраиваемая панель в проекте «Add In»Заполнение List<BusinessClass>.
Когда пользователь Excel вводит« = MyUdfFunction (6; 7) »в ячейку, вызывается мой метод в« Формуле ».Поскольку это происходит из другого процесса (из Excel), UDF не имеет доступа к экземплярам «Business», а List<BusinessClass>
недоступен.
UDF иногда можно вызывать более 500 000 раз.хочу вставить скрипт VBA, вызывающий мой UDF в цикле.По соображениям скорости я не хочу использовать общую память, именованные каналы, WCF или другие артефакты.Не хочу использовать службы UDF (не могу использовать сервер Sharepoint).
Я знаю, что когда вы находитесь в другом процессе, вы не можете использовать данные из других процессов.
Любая идеядать «Формуле» прямой доступ к «Бизнесу»?Как будто все 3 проекта выполняются в одном процессе ...
Заранее спасибо Жан Мари