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:

Categories: .NET, C#, library, Win32 API

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WP-SpamFree by Pole Position Marketing