2012-02-02 65 views
0

環境:C#,.NET 3.5,Windows 7的64時,Excel 2007,Visual Studio 2010中Excel加載類庫之間共享內存

我有3個項目一VS2010:

謨«業務»:一個類庫與全局靜態變量

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(類型類型)註冊...

[Guid("5268ABE2-9B09-439d-BE97-2EA60E103EF6")] 
[ClassInterface(ClassInterfaceType.AutoDual)] 
[ComVisible(true)] 
public class MyFunctions { 
public double MyUdfFunction(double number1, double number2) { 
{ 
return number1 * number2; 
} 

我的問題是非常簡單的解釋:我在項目中的功能區和一個自定義面板«添加在»灌裝List<BusinessClass>. 當Excel用戶在單元格中輸入'= MyUdfFunction(6; 7)'時,將調用我在«Formulas»中的方法。 由於它來自不同的流程(來自Excel),UDF無法訪問「商業」實例,而List<BusinessClass>無法訪問。

UDF有時可能被調用超過500,000次 由於速度的原因,我不想在循環中插入一個調用我的UDF的VBA腳本。 由於速度的原因,我不想使用共享內存,命名管道,WCF或其他工件。 不想使用UDF服務(不能使用Sharepoint服務器)。

我知道,當你在不同的過程中,你不能使用來自其他過程的數據。

任何讓「公式」直接訪問「業務」實例的想法?就像事先在同一個進程中的所有3個項目...

感謝 讓瑪麗

回答

1

您的「公式」項目是Excel自動化加載項。 Add-in Express允許您在同一個程序集中擁有COM加載項和XLL加載項;他們將加載到相同的AppDomain中,請檢查HowTo: Create a COM add-in, XLL UDF and RTD server in one assembly。更確切地說,自動化加載項也可以在同一個程序集中實現,但是您不能將自動化加載項加載到所有情況下的相同AppDomain中。

另請注意另一個博客:Invoking a COM add-in from an Excel XLL add-in: advanced sample

1

對於速度,你必須使用XLL接口在可能的情況,特別是對UDF的。我建議你看看使用Addin Express(費用)或Excel DNA(免費),這兩種方法都可以使用Interop-COM和XLL進程爲您提供.NET界面。

+0

感謝Charles,我已聯繫Add-In Express以查看他們的模型是否可以解決我的問題。 – 2012-02-03 06:30:11