Excel加载项在类库之间共享内存

环境:C#,.NET 3.5,Windows 7 64,Excel 2007,Visual Studio 2010

我有一个VS2010 3个项目:

Projet«商业»:具有全局静态variables的类库

List<BusinessClass> 

项目«加载项»:扩展性共享加载项和加载项类:

 [GuidAttribute("A9E83593-395F-4112-855D-A68C5088151F"), ProgId("eFrontCubeAddIn.CubeAddIn")] public class CubeAddIn : Object, Extensibility.IDTExtensibility2, ICustomTaskPaneConsumer {…} 

Excel将调用OnConnection,我将使用Excel对象(ExcelApp =(Excel.Application)应用程序;)进行交互。 “Add-In”中的所有交互都通过COM(InvokeMember)完成。 List<BusinessClass>是从“Add-In”创build和填充的,

项目«公式»:class级图书馆。 一个UDF Excel的具体公式。 方法使用以下模型构build,并使用[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; } 

我的问题是非常简单的解释:我有一个function区和一个自定义窗格项目«添加»填充List<BusinessClass>. 当Excel用户在单元格中input'= MyUdfFunction(6; 7)'时,我的方法在«Formulas»中被调用。 由于它来自不同的过程(来自Excel),UDF无法访问«业务»实例, List<BusinessClass>无法访问。

UDF可能有时被称为超过500.000倍为了速度的原因,我不想插入一个VBA脚本调用我的UDF在循环中。 出于速度的原因,我不想使用共享内存,命名pipe道,WCF或其他工件。 不想使用UDF服务(不能使用Sharepoint服务器)。

我知道,当你在不同的进程中,你不能使用其他进程的数据。

任何让“公式”直接访问“商业”实例的想法? 像所有3个项目在同一个过程中

在此先感谢让·玛丽

您的“公式”项目是Excel自动化加载项。 Add-in Express允许您在同一个程序集中拥有COM加载项和XLL加载项; 他们将加载到相同的AppDomain,检查如何:在一个程序集中创build一个COM加载项,XLL UDF和RTD服务器 。 更确切地说,自动化加载项也可以在同一个程序集中实现,但是在所有情况下都不能在同一个AppDomain中加载自动化加载项。

另请注意另一个博客: 从Excel XLL加载项调用COM加载项:高级示例 。

为了提高速度,您需要尽可能使用XLL界面,尤其是UDF。 我build议你看看使用Addin Express(费用)或者Excel DNA(免费),这两种方法都可以使用Interop-COM和XLL进程来为.NET提供.NET接口。