This documentation is archived and is not being maintained.

PreserveSigAttribute Class

Indicates that the HRESULT or retval signature transformation that takes place during COM interop calls should be suppressed.

For a list of all members of this type, see PreserveSigAttribute Members.


[Visual Basic]
NotInheritable Public Class PreserveSigAttribute
   Inherits Attribute
public sealed class PreserveSigAttribute : Attribute
public __gc __sealed class PreserveSigAttribute : public Attribute
class PreserveSigAttribute extends Attribute

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.


You can apply this attribute to methods.

By default, the Type Library Exporter (Tlbexp.exe) ensures that a call that returns an HRESULT of S_OK is transformed such that the [out, retval] parameter is used as the function return value. The S_OK HRESULT is discarded. For HRESULTs other than S_OK, the runtime throws an exception and discards the [out, retval] parameter. When you apply the PreserveSigAttribute to a managed method signature, the managed and unmanaged signatures of the attributed method are identical.

Preserving the original method signature is necessary if the member returns more than one success HRESULT value and you want to detect the different values. Since most COM member return an HRESULT, by applying the PreserveSigAttribute, you can retrieve an integer representing the success or failure HRESULT. Tlbexp.exe preserves any [out, retavl] parameters as out parameters in the managed signature.

The Type Library Importer (Tlbimp.exe) also applies this attribute; it applies the attribute to dispinterfaces when it imports a type library.


The following example shows how Tlbexp.exe converts a C# method without PreserveSigAttribute when exporting an assembly to a COM type library.

Managed signature:

int DoSomething (long l);

Unmanaged signature:

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

When you apply PreserveSigAttribute to the same C# method and export the assembly, the method conversion differs from the previous example. Notice that Tlbexp.exe removes the HRESULT and the [out, retval] parameter modifier.

Managed signature:

[PreserveSig] int DoSomething (long l);

Unmanaged signature:

int DoSomething ([in] long l);


Namespace: System.Runtime.InteropServices

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

Assembly: Mscorlib (in Mscorlib.dll)

See Also

PreserveSigAttribute Members | System.Runtime.InteropServices Namespace | Type Library Exporter (Tlbexp.exe) | Type Library Importer (Tlbimp.exe)