C# - .net 備忘録 |
mfcプログラマからみたC#や.netに関するメモです。
(記載内容について正しいことを保証するものではありません。MSDN等で確認してください)
Win32APIを直接呼び出す方法についてのまとめ。
.net環境からWin32APIを呼び出す方法は基本的にDLL名称と呼び出し形式がわかっていれば可能です。
Win32の書式:
BOOL Beep(DWORD dwFreq, DWORD
dwDuration);
C#から呼び出す場合の宣言:
[DllImport("kernel32.dll")]
extern static bool Beep(uint dwFreq,
uint dwDuration);
値渡しの場合は、このような宣言を行えば簡単にWin32が使用できます。
型の対応は以下の表のようになります。
Win32の型(Cの型) | C#の型(.net FrameWorkの型) |
HANDLE (void *) | System.IntPtr |
BYTE (unsigned char) | byte (System.Byte) |
SHORT (short) | short (System.Int16) |
WORD (unsigned short) | ushort (System.UInt16) |
INT (int) LONG (long) |
int (System.Int32) |
UINT (unsigned
int) DWORD, ULONG (unsigned long) |
uint (System.UInt32) |
BOOL (long) | bool (System.Boolean) |
CHAR (char) | char (System.Char) |
LPSTR (char *) LPWSTR (wchar_t *) |
System.Text.StringBuilder |
LPCSTR (const
char *) LPCWSTR (const wchar_t *) |
string (System.String) |
FLOAT (float) | float (System.Single) |
DOUBLE (double) | double (System.Double) |
Win32側の型が&付きや文字列以外のポインタ渡しの場合は宣言の前にrefを付けてC#の参照渡しを宣言する。
次に引数に構造体や構造体へのポインタもWin32APIでは多用されています。
RECT構造体の場合次のようになります。
[StructLayout(LayoutKind.Sequential)]
struct RECT {
public int left;
public int top;
public int right;
public int bottom;
}
注意点は、元のWin32の構造体の順番通り宣言する必要がある点です。
(Win32のヘッダファイルを確認すること!)