我有这些简单的代码
static void Main(string[] args)
{
object addInName = "MyAddin";
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Core.COMAddIn addin = app.COMAddIns.Item(ref addInName);
app.Visible = false;
var myObject = addin.Object;
var vvv = myObject.someMethod();
}
当运行它时,它会在线失败,某些方法抛出 NullReferenceException。但是myObject不是空的。
如果我在该行上放置了一个断点,请将鼠标光标移动到 myObject,单击扩展动态视图并单击某个界面视图。然后它就起作用了!
COM 对象虽然不为空,但似乎尚未准备就绪/初始化。但是,如果我从调试器断点检查它是内部状态,我会以某种方式强制它初始化。
问题出在哪里?
Addin COM 扩展了 StandardOleMarshalObject alrady。
尝试使用后期绑定技术(.Net 中的反射(。有关详细信息,请参阅 Type.InvokeMember。
这两个应用程序是否在同一安全上下文中运行?或者您是否使用管理员权限运行其中任何一个(以管理员身份运行(?