Freigeben über


PreserveSigAttribute-Klasse

Gibt an, dass die während COM-Interop-Aufrufen stattfindende HRESULT- oder retval-Signaturtransformation unterdrückt werden soll.

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

Syntax

'Declaration
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Method, Inherited:=False)> _
Public NotInheritable Class PreserveSigAttribute
    Inherits Attribute
'Usage
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

Hinweise

Dieses Attribut kann auf Methoden angewendet werden.

In der Standardeinstellung gewährleistet Type Library Exporter-Tool (Tlbexp.exe), dass ein Aufruf mit der Rückgabe eines HRESULT von S_OK so transformiert wird, dass der [out, retval]-Parameter als Rückgabewert für die Funktion verwendet wird. Das S_OK-HRESULT wird verworfen. Für andere HRESULTs als S_OK löst die Common Language Runtime eine Ausnahme aus und verwirft den [out, retval]-Parameter. Wenn PreserveSigAttribute auf eine verwaltete Methodensignatur angewendet wird, sind die verwaltete und die nicht verwaltete Signatur der attributierten Methode identisch.

Das Beibehalten der ursprünglichen Methodensignatur ist erforderlich, wenn der Member mehrere HRESULT-Erfolgswerte zurückgibt und die verschiedenen Werte erkannt werden sollen. Da die meisten COM-Member ein HRESULT zurückgeben, können Sie durch Anwenden von PreserveSigAttribute eine Ganzzahl abrufen, die das Erfolgs- oder Fehler-HRESULT darstellt. Tlbexp.exe behält alle [out, retval]-Parameter als out-Parameter in der verwalteten Signatur bei.

Type Library Importer-Tool (Tlbimp.exe) wendet dieses Attribut ebenfalls an. Das Attribut wird beim Importieren einer Typbibliothek auf Dispatchschnittstellen angewendet.

Hinweis

Die Rückgabetypen Currency, Guid und Object werden von der PreserveSigAttribute-Klasse nicht unterstützt, wenn die Interoperation von COM nach verwaltetem Code erfolgt und der verwaltete Code mit der PreserveSigAttribute-Klasse gekennzeichnet ist. Wenn Sie versuchen, einen dieser Rückgabetypen unter diesen Bedingungen mit der PreserveSigAttribute-Klasse zu verwenden, wird eine TypeLoadException ausgelöst.

Beispiel

Im folgenden Beispiel wird veranschaulicht, wie Tlbexp.exe beim Exportieren einer Assembly in eine COM-Typbibliothek eine C#-Methode ohne PreserveSigAttribute konvertiert.

Verwaltete Signatur:

int DoSomething (long l);

Nicht verwaltete Signatur:

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

Wenn Sie PreserveSigAttribute auf dieselbe C#-Methode anwenden und die Assembly exportieren, weicht die Methodenkonvertierung vom vorigen Beispiel ab. Beachten Sie, dass Tlbexp.exe das HRESULT und den [out, retval]-Parametermodifizierer entfernt.

Verwaltete Signatur:

[PreserveSig] int DoSomething (long l);

Nicht verwaltete Signatur:

int DoSomething ([in] long l);

Vererbungshierarchie

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

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

PreserveSigAttribute-Member
System.Runtime.InteropServices-Namespace

Weitere Ressourcen

Type Library Exporter-Tool (Tlbexp.exe)
Type Library Importer-Tool (Tlbimp.exe)