Hello, Win32 API(C#) World!
Posted on 4月 23rd, 2012 by cx20
Win32 API(C#)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は C# にて DllImport 属性を用いた呼出し例である。
ソースコード
using System; using System.Runtime.InteropServices; class Hello { [DllImport("user32.dll", CharSet=CharSet.Auto)] private extern static uint MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType); static void Main(string[] args) { MessageBox( new IntPtr(0), "Hello, Win32 API(C#) World!", "Hello, World!", 0 ); } } |
「文字セット」に「Auto」を指定した場合は「関数定義」「プラットフォーム」に応じて、呼び出される API 関数名が自動判別される。
「文字セット」に「Ansi」もしくは「Unicode」を指定した場合それぞれ、末尾が “A” / “W” の API 関数名として自動判別される。
文字セット指定 | 関数定義 | プラットフォーム | 文字変換 | 判別 | API関数名 |
---|---|---|---|---|---|
Auto | MessageBox | Windows 9x系 | ANSI | “A” | MessageBoxA |
Auto | MessageBox | Windows NT系 | Unicode | “W” | MessageBoxW |
Ansi または 省略 | MessageBox | – | ANSI | “A” | MessageBoxA |
Ansi または 省略 | MessageBoxA | – | ANSI | – | MessageBoxA |
Unicode | MessageBox | – | Unicode | “W” | MessageBoxW |
Unicode | MessageBoxW | – | Unicode | – | MessageBoxW |
また、Win32 データ型と C# データ型の対応は主に以下のようになっている。文字関連の型に関しては文字セット指定が必要なことに注意。
Win32 データ型 | C/C++ データ型 | .NET データ型 | C# データ型 |
---|---|---|---|
HANDLE | void * | IntPtr | – |
BYTE | unsigned char | Byte | byte |
SHORT | short | Int16 | short |
WORD | unsigned short | UInt16 | ushort |
INT | int | Int32 | int |
UINT | unsigned int | UInt32 | uint |
LONG | long | Int32 | int |
BOOL | int | Int32 | int |
DWORD | unsigned long | UInt32 | uint |
ULONG | unsigned long | UInt32 | uint |
CHAR | char | Char (Ansi) | char (Ansi) |
WCHAR | wchar_t | Char (Unicode) | char (Unicode) |
LPSTR | char * | StringBuilder (Ansi) | – |
LPCSTR | const char * | String (Ansi) | string (Ansi) |
LPWSTR | wchar_t * | StringBuilder (Unicode) | – |
LPCWSTR | const wchar_t * | String (Unicode) | string (Unicode) |
FLOAT | float | Single | float |
DOUBLE | double | Double | double |
コンパイル方法
C:¥> csc Hello.cs |
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API(C#) World! --------------------------- OK --------------------------- |
Tags: Win32 API