System.Runtime.InteropServices.PreserveSigAttribute Class

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

See Also: PreserveSigAttribute Members


[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
public sealed class PreserveSigAttribute : Attribute


You can apply this attribute to methods.

By default, the [<topic://cpgrfTypeLibraryExporterTlbexpexe>] 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 System.Runtime.InteropServices.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 System.Runtime.InteropServices.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 [<topic://cpgrfTypeLibraryImporterTlbimpexe>] also applies this attribute; it applies the attribute to dispinterfaces when it imports a type library.


Return types of UnmanagedType.Currency, Guid, and object are not supported by the System.Runtime.InteropServices.PreserveSigAttribute class when interoperation occurs from COM to managed code and the managed code is marked with the System.Runtime.InteropServices.PreserveSigAttribute class. When you attempt to use one of these return types with the System.Runtime.InteropServices.PreserveSigAttribute class during these conditions, a TypeLoadException is thrown.


Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)
Assembly Versions: 1.0.5000.0,,