C# 非静态互操作方法的PreserveSig 问题:
PreserveSig属性能否应用于外部定义的非静态函数?例如,我们可以用PreserveSig=true标记以下方法: 研究 Microsoft文档概述了PreserveSig属性的用法,用于控制作为HRESULT返回的错误类型是按原样返回还是转换为异常。但所有在线示例均适用于静态方法,例如,请参见: 最后,如果我们是定义COM互操作库的人,那么我们似乎可以通过使用PreserveSig标记方法来轻松地告诉方法不要将错误转换为异常,例如,请参见: 但这里的问题是,它假设我们是编写库的人。它不适用于在导入的DLL中定义的外部库 相关的 用例 我正在使用互操作库Microsoft.Office.interop.Excel循环浏览工作簿中的每个工作表,并使用每个工作表的UsedRange上的Range.SpecialCells函数检查错误。我访问所有互操作对象,首先单击功能区上的按钮,然后拉出应用程序对象:C# 非静态互操作方法的PreserveSig 问题:,c#,exception,com,interop,C#,Exception,Com,Interop,PreserveSig属性能否应用于外部定义的非静态函数?例如,我们可以用PreserveSig=true标记以下方法: 研究 Microsoft文档概述了PreserveSig属性的用法,用于控制作为HRESULT返回的错误类型是按原样返回还是转换为异常。但所有在线示例均适用于静态方法,例如,请参见: 最后,如果我们是定义COM互操作库的人,那么我们似乎可以通过使用PreserveSig标记方法来轻松地告诉方法不要将错误转换为异常,例如,请参见: 但这里的问题是,它假设我们是编写库的人。
Window window = e.Control.Context;
return window.Application;
然后我使用这个应用程序对象来获取工作簿,然后是工作表,然后是每个工作表的UsedRange,它是一个范围对象,是互操作库的一部分。从这个范围对象,我可以调用SpecialCells函数,但我无法控制它抛出异常以指示未找到单元格的事实。我一直在寻找一种方法来告诉interop库“不要为此方法引发异常”,或者甚至是一种方法,用一个不引发异常的版本来包装/覆盖该方法。唉,你不能将属性应用到你不控制的托管代码。答案在链接的Q+a上仍然有效。但有一个明显的痛点,Office互操作库相当大。并且可能发生超出您控制范围的变化。“嗯!”汉斯帕桑我无法从另一个答案中提取方法,并将其重新应用于本案。我将在问题中添加更多细节,以澄清我在寻找什么。。。