我基本了解在.NET中如何使用托管的RCW对象来包装COM对象。我的问题是当COM对象不存在时会发生什么。我知道RCW对象会增加引用计数,因此只要RCW对象存在,COM对象就不会被释放。但是如果从用户角度删除了COM对象怎么办?
比如我有一个PowerPoint幻灯片中的形状、Excel工作表或Word段落。我的应用程序创建了一个引用并保持一段时间。现在用户可能删除了PowerPoint幻灯片,关闭了Excel文件或删除了Word段落。如何正确地检测到这一点?
尝试后发现,当访问任何属性时,COM对象会抛出带有错误代码0x80004005的COMException,表示“对象不存在”。
但我想知道:这是一种可靠和安全的方法吗?COM对象是否真的会与RCW对象一起保留,还是Office可能将其从内存中删除?如果是这样,使用悬空引用是否危险,是否有更好的方法?
比如我有一个PowerPoint幻灯片中的形状、Excel工作表或Word段落。我的应用程序创建了一个引用并保持一段时间。现在用户可能删除了PowerPoint幻灯片,关闭了Excel文件或删除了Word段落。如何正确地检测到这一点?
尝试后发现,当访问任何属性时,COM对象会抛出带有错误代码0x80004005的COMException,表示“对象不存在”。
但我想知道:这是一种可靠和安全的方法吗?COM对象是否真的会与RCW对象一起保留,还是Office可能将其从内存中删除?如果是这样,使用悬空引用是否危险,是否有更好的方法?