【问题标题】:External C# program cannot invoke vsto COMAddin object method, but it can inside debugger外部 C# 程序无法调用 vsto COMAddin 对象方法,但可以在调试器内部调用
【发布时间】:2016-02-05 20:32:50
【问题描述】:

我有这些简单的代码

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();
        }

当运行它时,它在 someMethod 行失败并抛出 NullReferenceException。但 myObject 不为空。

如果我在该行设置断点,将鼠标光标移至 myObject,单击展开的Dynamic View,然后单击一些Interface View。然后就可以了!

似乎 COM 对象虽然不是 null,但还没有准备好/初始化。但是如果我从调试器断点检查它的内部状态,我会以某种方式强制它初始化。

有什么问题?

Addin COM 扩展了 StandardOleMarshalObject alrady。

【问题讨论】:

标签: c# dynamic com vsto office-interop


【解决方案1】:

尝试使用后期绑定技术(.Net 中的反射)。请参阅Type.InvokeMember 了解更多信息。

两个应用程序是否在相同的安全上下文中运行?或者您是否以管理员权限运行它们中的任何一个(以管理员身份运行)?

【讨论】:

  • 这个答案看起来更像是评论。
  • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • 我建议使用后期绑定技术,这可能会有所帮助。在大多数情况下,它有助于避免此类问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 2020-03-06
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多