【问题标题】:COM object that has been separated from its underlying RCW cannot be used using Microsoft.Office.Interop.Outlook无法使用 Microsoft.Office.Interop.Outlook 使用已与其基础 RCW 分离的 COM 对象
【发布时间】:2021-09-23 14:50:55
【问题描述】:

我面临以下问题

 COM object that has been separated from its underlying RCW cannot be used.'
    System.Runtime.InteropServices.InvalidComObjectException: COM object that has been separated from its underlying RCW cannot be used.
       at System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease)
       at Microsoft.Office.Interop.Outlook._MailItem.get_Subject()

以下代码:

  var mail = inspectorWrapper.MailItem;
                showcaseModel.Subject = mail?.Subject;
                showcaseModel.Title = mail?.Subject;

如何避免该异常? 我应该用Marshal.ReleaseComObject(mail) 释放邮件对象吗? ?

【问题讨论】:

    标签: c# asp.net .net com rcw


    【解决方案1】:

    这是一个很好的指标,表明您需要检查加载项代码并检查所有 Marshal.ReleaseComObject 语句。

    如果您的加载项代码中没有此类语句,则表明您正在尝试在代码中使用来自 OOM 的不可用对象。例如,打开一个新的检查器窗口,您可以在其中检索对邮件项的对象引用并将其保存在代码中。但用户可以发送此类项目,因此您的对象引用与底层 COM 对象分离。它不再有效 - 项目已移动到另一个文件夹(或删除,如果在项目上设置了 DeleteAfterSubmit 属性)。

    建议是相同的 - 检查您的源代码。

    【讨论】:

      猜你喜欢
      • 2011-03-11
      • 2011-04-26
      • 2012-04-23
      • 1970-01-01
      • 2011-11-21
      • 2012-04-27
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多