MsgBox exemplo

Este exemplo demonstra sistema autônomo passar sistema autônomo tipos de cadeias de caracteres pelo valor sistema autônomo em parâmetros e quando usar o EntryPoint, CharSet, e ExactSpelling campos.

O exemplo MsgBox utiliza a seguinte função não gerenciada, mostrada com sua declaração de função original:

  • MessageBox exportados de User32.dll.

    int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, 
       UINT uType);
    

Neste exemplo, a LibWrap classe contém um protótipo gerenciado para cada função não gerenciado chamado pela MsgBoxSample classe. O protótipo gerenciado métodos MsgBox, MsgBox2, e MsgBox3 ter declarações diferentes para a mesma função não gerenciada.

A declaração de MsgBox2 produz saída incorreta na caixa de mensagem porque o tipo de caractere especificado sistema autônomo ANSI, é incompatível com o ponto de entrada MessageBoxW, que é o nome da função Unicode. A declaração de MsgBox3 cria uma incompatibilidade entre o EntryPoint, Conjunto de caracteres, and ExactSpelling campos.Quando chamado, MsgBox3 lança uma exceção. Para obter informações detalhadas na cadeia de caractere de nomeação e marshaling de nome, consulte Especificando um conjunto de caractere.

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 managed prototypes for unmanaged functions.
   Declare Auto Function MsgBox Lib "User32.dll" Alias "MessageBox" ( _
   ByVal hWnd As Integer, ByVal txt As String, ByVal caption As String, _
   yVal typ As Integer ) As Integer
   
   ' Causes incorrect output in the message window.
   Declare Ansi Function MsgBox2 Lib "User32.dll" Alias "MessageBoxW" ( _
   ByVal hWnd As Integer, ByVal txt As String, ByVal caption As String, _
   ByVal type As Integer ) As Integer 
   
   ' Causes an exception to be thrown.
   ' ExactSpelling is True by default in Visual Basic 2005 when 
   ' Ansi or Unicode is used.
   Declare Ansi Function MsgBox3 Lib "User32.dll" Alias "MessageBox" ( _
   ByVal hWnd As Integer, ByVal txt As String, ByVal caption As String, _
   ByVal typ As Integer ) As Integer
End Class 
public class LibWrap 
{
   // Declares managed prototypes for unmanaged functions.
   [ DllImport( "User32.dll", EntryPoint="MessageBox", 
      CharSet=CharSet.Auto )]
   public static extern int MsgBox( int hWnd, String text, String caption, 
      uint type );
   // Causes incorrect output in the message window.
   [ DllImport( "User32.dll", EntryPoint="MessageBoxW", 
      CharSet=CharSet.Ansi )]
   public static extern int MsgBox2( int hWnd, String text, 
      String caption, uint type );
   // Causes an exception to be thrown. EntryPoint, CharSet, and 
   // ExactSpelling fields are mismatched.
   [ DllImport( "User32.dll", EntryPoint="MessageBox", 
      CharSet=CharSet.Ansi, ExactSpelling=true )]
   public static extern int MsgBox3( int hWnd, String text, 
      String caption, uint type );
}

Chamando funções

Public Class MsgBoxSample
   Public Shared Sub Main()
   
      LibWrap.MsgBox( 0, "Correct text", "MsgBox Sample", 0 )
      LibWrap.MsgBox2( 0, "Incorrect text", "MsgBox Sample", 0 )
      
      Try
         LibWrap.MsgBox3( 0, "No such function", "MsgBox Sample", 0 )
      Catch e As EntryPointNotFoundException
         Console.WriteLine( "EntryPointNotFoundException thrown _
           as expected!" )
      End Try
   End Sub 
End Class 
public class MsgBoxSample
{
   public static void Main()
   {
      LibWrap.MsgBox( 0, "Correct text", "MsgBox Sample", 0 );
      LibWrap.MsgBox2( 0, "Incorrect text", "MsgBox Sample", 0 );
      try
      {
         LibWrap.MsgBox3( 0, "No such function", "MsgBox Sample", 0 );
      }
      catch( EntryPointNotFoundException )
      {
         Console.WriteLine( "EntryPointNotFoundException thrown as 
           expected!" );
      }
   }
}

Consulte também

Tarefas

Invocação de plataforma Tecnologia Exemplo

Conceitos

marshaling de strings

Tipos de dados de invocação de plataforma

Padrão de marshaling de strings

Criando protótipos em código gerenciado

Especificando um conjunto de caracteres