PreserveSigAttribute 类

指示应取消在 COM interop 调用期间发生的 HRESULT 或 retval 签名转换。

**命名空间:**System.Runtime.InteropServices
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Method, Inherited:=False)> _
Public NotInheritable Class PreserveSigAttribute
    Inherits Attribute
用法
Dim instance As PreserveSigAttribute
[ComVisibleAttribute(true)] 
[AttributeUsageAttribute(AttributeTargets.Method, Inherited=false)] 
public sealed class PreserveSigAttribute : Attribute
[ComVisibleAttribute(true)] 
[AttributeUsageAttribute(AttributeTargets::Method, Inherited=false)] 
public ref class PreserveSigAttribute sealed : public Attribute
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute AttributeUsageAttribute(AttributeTargets.Method, Inherited=false) */ 
public final class PreserveSigAttribute extends Attribute
ComVisibleAttribute(true) 
AttributeUsageAttribute(AttributeTargets.Method, Inherited=false) 
public final class PreserveSigAttribute extends Attribute

备注

可将该属性应用于方法。

默认情况下,类型库导出程序 (Tlbexp.exe) 将确保对返回 S_OK HRESULT 的调用进行转换,从而使 [out, retval] 参数可以用作函数返回值。S_OK HRESULT 被放弃。对于除 S_OK 以外的 HRESULT,运行库将引发异常并放弃 [out, retval] 参数。如果将 PreserveSigAttribute 应用于托管方法签名,则该属性化方法的托管签名与非托管签名相同。

如果该成员返回多个成功 HRESULT 值,而且您希望检测不同的值,则有必要保留原始方法签名。由于大多数 COM 成员都返回 HRESULT(通过应用 PreserveSigAttribute),所以您可以检索表示 HRESULT 成功或失败的整数。Tlbexp.exe 保留所有 [out, retavl] 参数,作为托管签名中的输出参数。

类型库导入程序 (Tlbimp.exe) 也应用此属性;它在导入类型库时将此属性应用于调度接口。

提示

如果从 COM 对托管代码执行交互操作,并且该托管代码是使用 PreserveSigAttribute 类标记的,则 PreserveSigAttribute 类不支持返回类型 CurrencyGuidObject。在此类情况下,如果试图对 PreserveSigAttribute 类使用这些返回类型之一,则会引发 TypeLoadException

示例

下面的示例显示 Tlbexp.exe 在将程序集导出到 COM 类型库时,如何转换未应用 PreserveSigAttribute 的 C# 方法。

托管签名:

int DoSomething (long l);

非托管签名:

HRESULT DoSomething ([in] long l, [out, retval] int * i);

如果将 PreserveSigAttribute 应用于同一 C# 方法并导出该程序集,则该方法转换与前一示例不同。注意,Tlbexp.exe 移除了 HRESULT 及 [out, retval] 参数修饰符。

托管签名:

[PreserveSig] int DoSomething (long l);

非托管签名:

int DoSomething ([in] long l);

继承层次结构

System.Object
   System.Attribute
    System.Runtime.InteropServices.PreserveSigAttribute

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0

请参见

参考

PreserveSigAttribute 成员
System.Runtime.InteropServices 命名空间

其他资源

类型库导出程序 (Tlbexp.exe)
类型库导入程序 (Tlbimp.exe)