Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gibt an, dass Daten vom Aufgerufenen zurück an den Aufrufer gemarshallt werden.
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Parameter, Inherited:=False)> _
Public NotInheritable Class OutAttribute
Inherits Attribute
'Usage
Dim instance As OutAttribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=false)]
public sealed class OutAttribute : Attribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets::Parameter, Inherited=false)]
public ref class OutAttribute sealed : public Attribute
/** @attribute ComVisibleAttribute(true) */
/** @attribute AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=false) */
public final class OutAttribute extends Attribute
ComVisibleAttribute(true)
AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=false)
public final class OutAttribute extends Attribute
Hinweise
Dieses Attribut kann auf Parameter angewendet werden.
Das OutAttribute ist optional. Das Attribut wird nur für COM-Interop und Plattformaufrufe unterstützt. Wenn keine expliziten Einstellungen vorhanden sind, nimmt der Interop-Marshaller Regeln auf der Grundlage des Parametertyps an, wobei es keine Rolle spielt, ob der Parameter als Verweis oder als Wert übergeben wird und ob der Typ blitfähig oder nicht blitfähig ist. Beispielsweise wird für die StringBuilder-Klasse immer angenommen, dass sie vom Typ In/Out ist, und für ein als Wert übergebenes Array von Zeichenfolgen wird angenommen, das es vom Typ In ist.
Ein Nur-Out-Verhalten stellt nie das Standardverhalten beim Marshalling für Parameter dar. Sie können OutAttribute auf als Verweis übergebene Wert- und Verweistypen anwenden, um das to In/Out-Verhalten in ein Nur-Out-Verhalten zu ändern. Dies entspricht der Verwendung des out-Schlüsselworts in C#. Beispielsweise kann das Verhalten von als Wert übergebenen Arrays, die in der Standardeinstellung als Nur-In-Parameter gemarshallt werden, in Nur-Out geändert werden. Das Verhalten weist jedoch nicht immer die erwartete Semantik auf, wenn die Typen vollständig blitfähige Elemente oder Felder enthalten, da der Interop-Marshaller eine Fixierung verwendet. Wenn das Übergeben von Daten an den Aufgerufenen nicht als Problem angesehen wird, bietet das Nur-Out-Marshalling bei nicht blitfähigen Typen eine höhere Leistung.
Das Kombinieren von InAttribute und OutAttribute bietet sich besonders an, wenn sie auf auf Arrays und formatierte, nicht blitfähige Typen angewendet werden. Für Aufrufer werden die von einem Aufgerufenen an diesen Typen vorgenommenen Änderungen nur dann angezeigt, wenn beide Attribute angewendet wurden. Da bei diesen Typen während des Marshallens Kopiervorgänge erforderlich sind, können Sie mithilfe von InAttribute und OutAttribute die Anzahl nicht benötigter Kopien reduzieren.
Weitere Informationen über die Auswirkung des OutAttribute auf das Marshallingverhalten finden Sie unter Direktionale Attribute.
Beispiel
Im folgenden Beispiel wird die Anwendung von InAttribute und OutAttribute auf den Prototyp eines Plattformaufrufs veranschaulicht, dem ein Array als Parameter übergeben wird. Durch die Kombination der Richtungsattribute kann der Aufrufer die vom Aufgerufenen vorgenommenen Änderungen identifizieren.
' Declare a class member for each structure element.
< StructLayout( LayoutKind.Sequential, CharSet:=CharSet.Auto )> _
Public Class OpenFileName
Public structSize As Integer = 0
Public filter As String = Nothing
Public file As String = Nothing
' ...
End Class 'OpenFileName
Public Class LibWrap
' Declare managed prototype for the unmanaged function.
Declare Auto Function GetOpenFileName Lib "Comdlg32.dll" ( _
<[In], Out> ByVal ofn As OpenFileName ) As Boolean
End Class 'LibWrap
// Declare a class member for each structure element.
[ StructLayout( LayoutKind.Sequential, CharSet=CharSet.Auto )]
public class OpenFileName
{
public int structSize = 0;
public string filter = null;
public string file = null;
// ...
}
public class LibWrap
{
// Declare a managed prototype for the unmanaged function.
[ DllImport( "Comdlg32.dll", CharSet=CharSet.Auto )]
public static extern bool GetOpenFileName([ In, Out ] OpenFileName ofn );
}
// Declare a class member for each structure element.
[StructLayout(LayoutKind::Sequential,CharSet=CharSet::Auto)]
public ref class OpenFileName
{
public:
int structSize;
String^ filter;
String^ file;
// ...
};
public ref class LibWrap
{
public:
// Declare a managed prototype for the unmanaged function.
[DllImport("Comdlg32.dll",CharSet=CharSet::Auto)]
static bool GetOpenFileName( [In,Out]OpenFileName^ ofn );
};
// Declare a class member for each structure element.
/** @attribute StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)
*/
public class OpenFileName
{
public int structSize = 0;
public String filter = null;
public String file = null;
// ...
} //OpenFileName
public class LibWrap
{
// Declare a managed prototype for the unmanaged function.
/** @attribute DllImport("Comdlg32.dll", CharSet = CharSet.Auto)
*/
public static native boolean GetOpenFileName(
/** @attribute In()
@attribute Out()
*/
OpenFileName ofn);
} //LibWrap
Vererbungshierarchie
System.Object
System.Attribute
System.Runtime.InteropServices.OutAttribute
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, 1.0
Siehe auch
Referenz
OutAttribute-Member
System.Runtime.InteropServices-Namespace
InAttribute-Klasse
StringBuilder