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 Aufrufer an den Aufgerufenen gemarshallt werden, jedoch nicht zurück an den Aufrufer.
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
<AttributeUsageAttribute(AttributeTargets.Parameter, Inherited:=False)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class InAttribute
Inherits Attribute
'Usage
Dim instance As InAttribute
[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=false)]
[ComVisibleAttribute(true)]
public sealed class InAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Parameter, Inherited=false)]
[ComVisibleAttribute(true)]
public ref class InAttribute sealed : public Attribute
/** @attribute AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=false) */
/** @attribute ComVisibleAttribute(true) */
public final class InAttribute extends Attribute
AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=false)
ComVisibleAttribute(true)
public final class InAttribute extends Attribute
Hinweise
Dieses Attribut kann auf Parameter angewendet werden.
Das InAttribute 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.
InAttribute kann nicht auf einen Parameter angewendet werden, der mit dem out-Schlüsselwort aus C# geändert wurde. Um eine Verwechselung des In-Schlüsselworts in Visual Basic mit InAttribute zu vermeiden ("In" ohne "Attribute"), sollten Sie das <[In]>-Format verwenden, bei dem das Attribut in eckige Klammern eingeschlossen ist.
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 InAttribute 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.InAttribute
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
InAttribute-Member
System.Runtime.InteropServices-Namespace
OutAttribute
StringBuilder