代码之家  ›  专栏  ›  技术社区  ›  Colm Bhandal

非静态互操作方法的PreserveSig

  •  0
  • Colm Bhandal  · 技术社区  · 6 年前

    问题:

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

    https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel.range.specialcells?view=excel-pia

    研究

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

    https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.dllimportattribute.preservesig?view=netframework-4.8

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

    https://blogs.msdn.microsoft.com/adam_nathan/2003/04/30/preservesig/

    相关的

    .NET C#: Is it possible to import TLB (semi-)automatically and add PreserveSig to one type?

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

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

    0 回复  |  直到 6 年前
        1
  •  0
  •   mjwills Myles McDonnell    6 年前

    遗憾的是,您不能将属性应用于不受控制的托管代码。