Memory ExcelDNA存储空间

Memory ExcelDNA存储空间,memory,interop,mef,excel-dna,Memory,Interop,Mef,Excel Dna,我正在编写一个具有多个潜在用户界面的应用程序,并在启动期间使用MEF注入适当的实现。IDisplay的一个实现使用ExcelDNA(Excel是接口)。代码将Excel作为一个流程启动,通过 var processInfo = new ProcessStartInfo { FileName = PATH_TO_EXCEL, Arguments = PATH_TO_EXCELDNA_ADDIN }; Process.Start(processInfo); 这很好,只是Exce

我正在编写一个具有多个潜在用户界面的应用程序,并在启动期间使用MEF注入适当的实现。
IDisplay
的一个实现使用ExcelDNA(Excel是接口)。代码将Excel作为一个流程启动,通过

var processInfo = new ProcessStartInfo
{
    FileName  = PATH_TO_EXCEL,
    Arguments = PATH_TO_EXCELDNA_ADDIN
};

Process.Start(processInfo);
这很好,只是Excel现在位于单独的内存空间中,因此UI回调(即功能区按钮单击)无法访问任何注入或分配的属性


一种可能的解决方案是先启动Excel,然后让ExcelDNA的
AutoOpen()
hook(加载到Excel中的外接程序被调用)调用bootstrapper类来配置MEF,但是我想知道是否可以在C#和Excel进程之间共享内存?是否通过
Excel.Application app=new Excel.Application{Visible=true;}
resolve启动Excel?我会尝试这样做,但无法找到如何指定要加载的ExcelDNA加载项的路径(如上所述)。

Excel将始终作为单独的进程运行。因此,您不能在Excel进程和其他进程之间共享内存。然而,C#代码可以在Excel进程内部运行——这正是Excel DNA外接程序的工作方式

您还可以在Excel进程和其他进程之间进行通信。其中一个选项是使用COM自动化互操作-这是从您自己的可执行文件调用
new Excel.Application
时所做的操作。您正在启动一个单独的Excel进程(或连接到一个现有的正在运行的进程),然后返回一个进程间通信代理(应用程序对象)

然后,如果您想让Excel进程加载Excel DNA加载项,可以调用
Application.RegisterXLL(path\u to\u add\u in)
让它加载.xll。如何连接Excel DNA外接程序和其余代码仍有待解决


您可能仍然需要某种类型的跨进程通信,如.NET远程处理、带有命名管道的WCF或诸如此类的内容。

Excel将始终作为单独的进程运行。因此,您不能在Excel进程和其他进程之间共享内存。然而,C#代码可以在Excel进程内部运行——这正是Excel DNA外接程序的工作方式

您还可以在Excel进程和其他进程之间进行通信。其中一个选项是使用COM自动化互操作-这是从您自己的可执行文件调用
new Excel.Application
时所做的操作。您正在启动一个单独的Excel进程(或连接到一个现有的正在运行的进程),然后返回一个进程间通信代理(应用程序对象)

然后,如果您想让Excel进程加载Excel DNA加载项,可以调用
Application.RegisterXLL(path\u to\u add\u in)
让它加载.xll。如何连接Excel DNA外接程序和其余代码仍有待解决


您可能仍然需要某种类型的跨进程通信,如.NET远程处理、带有命名管道的WCF或诸如此类的内容。

Excel将始终作为单独的进程运行。因此,您不能在Excel进程和其他进程之间共享内存。然而,C#代码可以在Excel进程内部运行——这正是Excel DNA外接程序的工作方式

您还可以在Excel进程和其他进程之间进行通信。其中一个选项是使用COM自动化互操作-这是从您自己的可执行文件调用
new Excel.Application
时所做的操作。您正在启动一个单独的Excel进程(或连接到一个现有的正在运行的进程),然后返回一个进程间通信代理(应用程序对象)

然后,如果您想让Excel进程加载Excel DNA加载项,可以调用
Application.RegisterXLL(path\u to\u add\u in)
让它加载.xll。如何连接Excel DNA外接程序和其余代码仍有待解决


您可能仍然需要某种类型的跨进程通信,如.NET远程处理、带有命名管道的WCF或诸如此类的内容。

Excel将始终作为单独的进程运行。因此,您不能在Excel进程和其他进程之间共享内存。然而,C#代码可以在Excel进程内部运行——这正是Excel DNA外接程序的工作方式

您还可以在Excel进程和其他进程之间进行通信。其中一个选项是使用COM自动化互操作-这是从您自己的可执行文件调用
new Excel.Application
时所做的操作。您正在启动一个单独的Excel进程(或连接到一个现有的正在运行的进程),然后返回一个进程间通信代理(应用程序对象)

然后,如果您想让Excel进程加载Excel DNA加载项,可以调用
Application.RegisterXLL(path\u to\u add\u in)
让它加载.xll。如何连接Excel DNA外接程序和其余代码仍有待解决

您可能仍然需要某种类型的跨进程通信,如.NETRemoting、带有命名管道的WCF等