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.
Note: |
|---|
Return types of
Currency, Guid, and Object are not supported by the PreserveSigAttribute class when interoperation occurs from COM to managed code and the managed code is marked with the PreserveSigAttribute class. When you attempt to use one of these return types with the PreserveSigAttribute class during these conditions, a TypeLoadException is thrown.
|