Поделиться через


Примеры вызовов неуправляемого кода

Обновлен: Ноябрь 2007

В следующем примере демонстрируется определение и вызов функции MessageBox из User32.dll. В качестве аргумента передается простая строка. В этих примерах значение поля DllImportAttribute.CharSet равно Auto, чтобы позволить целевой платформе определить ширину символа и маршалинг строки.

Эквивалентные примеры приводятся для Visual Basic, C# и C++. Чтобы показать все примеры, нажмите кнопку "Фильтр языка" 42b9ea93.Filter2(ru-ru,VS.90).gif в левом верхнем углу страницы. Дополнительные примеры см. в разделе Маршалинг данных с платформозависимым вызовом.

Imports System.Runtime.InteropServices

Public Class Win32
    Declare Auto Function MessageBox Lib "user32.dll" _
       (ByVal hWnd As Integer, ByVal txt As String, _
       ByVal caption As String, ByVal Typ As Integer) As IntPtr
End Class

Public Class HelloWorld    
    Public Shared Sub Main()
        Win32.MessageBox(0, "Hello World", "Platform Invoke Sample", 0)
    End Sub
End Class
using System.Runtime.InteropServices;

public class Win32 {
     [DllImport("user32.dll", CharSet=CharSet.Auto)]
     public static extern IntPtr MessageBox(int hWnd, String text, 
                     String caption, uint type);
}

public class HelloWorld {
    public static void Main() {
       Win32.MessageBox(0, "Hello World", "Platform Invoke Sample", 0);
    }
}      
using namespace System::Runtime::InteropServices;

typedef void* HWND;
[DllImport("user32", CharSet=CharSet::Auto)]
extern "C" IntPtr MessageBox(HWND hWnd,
                          String* pText,
                          String* pCaption,
                          unsigned int uType);
void main(void) {
     String* pText = L"Hello World!";
     String* pCaption = L"Platform Invoke Sample";
     MessageBox(0, pText, pCaption, 0);
}

См. также

Основные понятия

Создание прототипов в управляемом коде

Определение кодировки

Ссылки

DllImportAttribute