Archive for 4月 24th, 2012
-
Hello, Win32 API(VB.NET) World!
Posted on 4月 24th, 2012 by cx20
Win32 API(VB.NET)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は VB.NET にて Declare ステートメントを用いた呼出し例である。ソースコード
Imports System Imports System.Runtime.InteropServices Module Hello Declare Auto Function MessageBox Lib "user32.dll" Alias "MessageBox" ( _ ByVal hWnd As IntPtr, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal nType As UInteger _ ) As Integer Sub Main() MessageBox( New IntPtr(0), "Hello, Win32 API(VB.NET) World!", "Hello, World!", 0 ) End Sub End Module
「文字セット」に「Auto」を指定した場合は「エイリアス名」「プラットフォーム」に応じて、呼び出される API 関数名が自動判別される。
「文字セット」に「Ansi」もしくは「Unicode」を指定した場合は「エイリアス名」が API 関数名として使用される為、”A” / “W” のどちらのバージョンであるか明示的に指定する必要がある。(指定を行わない場合、関数名が見つからずエラーとなる)文字セット指定 エイリアス名 プラットフォーム 文字変換 判別 API関数名 Auto MessageBox Windows 9x系 ANSI “A” MessageBoxA Auto MessageBox Windows NT系 Unicode “W” MessageBoxW Ansi または 省略 MessageBox – ANSI – Not Found Ansi または 省略 MessageBoxA – ANSI – MessageBoxA Unicode MessageBox – Unicode – Not Found Unicode MessageBoxW – Unicode – MessageBoxW また、Win32 データ型と VB.NET データ型の対応は主に以下のようになっている。「(2.0)」は、.NET Framework 2.0 で追加された型を示す。文字関連の型に関しては文字セット指定が必要なことに注意。
Win32 データ型 C/C++ データ型 .NET データ型 VB.NET データ型 HANDLE void * IntPtr – BYTE unsigned char Byte Byte SHORT short Int16 Short WORD unsigned short UInt16 UShort (2.0) INT int Int32 Integer UINT unsigned int UInt32 UInteger (2.0) LONG long Int32 Integer BOOL int Int32 Integer DWORD unsigned long UInt32 UInteger (2.0) ULONG unsigned long UInt32 UInteger (2.0) 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 Single DOUBLE double Double Double コンパイル方法
C:¥> vbc Hello.vb
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API(VB.NET) World! --------------------------- OK ---------------------------