Archive for 4月 23rd, 2012
-
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 ---------------------------