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.
Dieses Beispiel demonstriert die standardmäßige Apartmenteinstellung eines nicht verwalteten Objekts, das Daten an eine nicht verwaltete Methode übergibt, welche die CoInitialize-Methode aufruft. Die CoInitialize-Methode initialisiert eine COM-Bibliothek in einem Singlethread-Apartment (STA). Standardmäßig werden C#-Clients in Multithread-Apartments (MTA) initialisiert. Visual Basic 2005-Clients werden als STA-Objekte initialisiert und müssen nicht angepasst werden.
Das ActiveDir-Beispiel verwendet die folgende nicht verwaltete Methode, die zusammen mit ihrer ursprünglichen Funktionsdeklaration aufgeführt wird:
DsBrowseForContainer aus Dsuiext.dll exportiert.
int DsBrowseForContainer(PDSBROWSEINFO pInfo);
In C# erstellt das STAThreadAttribute-Attribut ein STA. Da STA die standardmäßige Apartmenteinstellung für Visual Basic 2005-Clients ist, wird kein Attribut benötigt. Die Marshal.SizeOf-Methode errechnet dynamisch die Größe der nicht verwalteten Struktur.
Der Quellcode für die folgenden Codebeispiele wird im Technologiebeispiel für Plattformaufrufe in .NET Framework bereitgestellt.
Deklarieren von Prototypen
Public Class LibWrap
' Declares a managed prototype for the unmanaged function.
Declare Unicode Function DsBrowseForContainerW Lib "dsuiext.dll" ( _
ByRef info As DSBrowseInfo ) As Integer
Public Shared DSBI_ENTIREDIRECTORY As Integer = &H90000
End Class 'LibWrap
public class LibWrap
{
// Declares a managed prototype for the unmanaged function.
[ DllImport( "dsuiext.dll", CharSet=CharSet.Unicode )]
public static extern int DsBrowseForContainerW( ref DSBrowseInfo info );
public const int DSBI_ENTIREDIRECTORY = 0x00090000;
}
Aufrufen von Funktionen
Class App
Public Shared MAX_PATH As Integer = 256
' The DsBrowseForContainerW method should be called from STA.
' STA is the default for Visual Basic 2005 clients, so no explicit
' setting is required as it is for C# clients.
Public Shared Sub Main()
' Initializes all members.
Dim dsbi As New DSBrowseInfo()
Dim status As Integer = LibWrap.DsBrowseForContainerW( dsbi )
End Sub 'Main
End Class 'App
class App
{
public const int MAX_PATH = 256;
// Must be marked as STA because the default is MTA.
// DsBrowseForContainerW calls CoInitialize, which initializes the
// COM library as STA.
[ STAThread ]
public static void Main()
{
// Initializes all members.
…
int status = LibWrap.DsBrowseForContainerW( ref dsbi );
}
}
Siehe auch
Konzepte
Verschiedene Marshallingbeispiele
Datentypen für den Plattformaufruf
Erstellen von Prototypen in verwaltetem Code