我在 VBE 的 C# 插件中有此代码(强调“VBE”:它不是MS-Office 插件):
public abstract class HostApplicationBase<TApplication> : IHostApplication
where TApplication : class
{
protected readonly TApplication Application;
protected HostApplicationBase(string applicationName)
{
Application = (TApplication)Marshal.GetActiveObject(applicationName + ".Application");
}
TApplication
MS-Office 互操作类在哪里Application
,例如Microsoft.Office.Interop.Excel.Application
类型;这里的applicationName
参数将是 Excel 的“Excel”。
问题是它Marshal.GetActiveObject
似乎只返回创建的第一个实例,而这不一定是托管当前 VBE 环境的实例,这会导致问题。
如何获得实际的主机应用程序实例?