Partilhar via


Exemplo de ActiveDir

Este exemplo demonstra como ajustar a configuração de apartment padrão de um objeto gerenciado passando dados para um método não gerenciado que chama o Em coInitialize método.The Em coInitialize método inicializa uma biblioteca COM em um apartment single-threaded (STA).Por padrão, translation from VPE for Csharp clientes são inicializados em apartments multithreaded (MTA).Visual Basic 2005 clientes são inicializados sistema autônomo objetos STA e não precisam ser ajustadas.

O exemplo ActiveDir utiliza o seguinte método não gerenciado, mostrado com sua declaração de função original:

  • DsBrowseForContainer exportados de Dsuiext.dll.

    int DsBrowseForContainer(PDSBROWSEINFO pInfo);
    

Em translation from VPE for Csharp, o STAThreadAttribute atributo cria um apartment STA. Como STA é a configuração de apartment padrão de Visual Basic 2005 clientes, nenhum atributo é necessário. The Marshal.SizeOf método calcula dinamicamente o dimensionar da estrutura não gerenciada.

O código-fonte para os exemplos de código a seguir é fornecido pelo.NET estrutura Invocação de plataforma Tecnologia Exemplo.

Declaração de protótipos

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;   
}

Chamando funções

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 );
   }
}

Consulte também

Conceitos

Diversos exemplos de marshaling

Tipos de dados de invocação de plataforma

Criando protótipos em código gerenciado