Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 非静态互操作方法的PreserveSig 问题:_C#_Exception_Com_Interop - Fatal编程技术网

C# 非静态互操作方法的PreserveSig 问题:

C# 非静态互操作方法的PreserveSig 问题:,c#,exception,com,interop,C#,Exception,Com,Interop,PreserveSig属性能否应用于外部定义的非静态函数?例如,我们可以用PreserveSig=true标记以下方法: 研究 Microsoft文档概述了PreserveSig属性的用法,用于控制作为HRESULT返回的错误类型是按原样返回还是转换为异常。但所有在线示例均适用于静态方法,例如,请参见: 最后,如果我们是定义COM互操作库的人,那么我们似乎可以通过使用PreserveSig标记方法来轻松地告诉方法不要将错误转换为异常,例如,请参见: 但这里的问题是,它假设我们是编写库的人。

PreserveSig属性能否应用于外部定义的非静态函数?例如,我们可以用PreserveSig=true标记以下方法:

研究 Microsoft文档概述了PreserveSig属性的用法,用于控制作为HRESULT返回的错误类型是按原样返回还是转换为异常。但所有在线示例均适用于静态方法,例如,请参见:

最后,如果我们是定义COM互操作库的人,那么我们似乎可以通过使用PreserveSig标记方法来轻松地告诉方法不要将错误转换为异常,例如,请参见:

但这里的问题是,它假设我们是编写库的人。它不适用于在导入的DLL中定义的外部库

相关的

用例 我正在使用互操作库Microsoft.Office.interop.Excel循环浏览工作簿中的每个工作表,并使用每个工作表的UsedRange上的Range.SpecialCells函数检查错误。我访问所有互操作对象,首先单击功能区上的按钮,然后拉出应用程序对象:

Window window = e.Control.Context;
return window.Application;

然后我使用这个应用程序对象来获取工作簿,然后是工作表,然后是每个工作表的UsedRange,它是一个范围对象,是互操作库的一部分。从这个范围对象,我可以调用SpecialCells函数,但我无法控制它抛出异常以指示未找到单元格的事实。我一直在寻找一种方法来告诉interop库“不要为此方法引发异常”,或者甚至是一种方法,用一个不引发异常的版本来包装/覆盖该方法。

唉,你不能将属性应用到你不控制的托管代码。

答案在链接的Q+a上仍然有效。但有一个明显的痛点,Office互操作库相当大。并且可能发生超出您控制范围的变化。“嗯!”汉斯帕桑我无法从另一个答案中提取方法,并将其重新应用于本案。我将在问题中添加更多细节,以澄清我在寻找什么。。。