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.
System.Object
System.Attribute
System.Runtime.InteropServices.PreserveSigAttribute
[Visual Basic] <AttributeUsage(AttributeTargets.Method)> NotInheritable Public Class PreserveSigAttribute Inherits Attribute [C#] [AttributeUsage(AttributeTargets.Method)] public sealed class PreserveSigAttribute : Attribute [C++] [AttributeUsage(AttributeTargets::Method)] public __gc __sealed class PreserveSigAttribute : public Attribute [JScript] public AttributeUsage(AttributeTargets.Method) 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.
Remarks
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.
Example
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);
Requirements
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)