C# 入門 & 実践 / C sharp
101. アンマネージ DLL の使用 - 2 - DllImportAttribute
DllImportAttribute を使用して、DLLのメソッドを使用します。
とりあえず
http://msdn2.microsoft.com/ja-jp/library/42b9ea93.・・・
にあるのと同じく MessageBoxを利用してみたいと思います。
DllImport と
extern 修飾子 が重要なポイントですね。
extern 修飾子 は、メソッドがアンマネージコードである時に使用します。
// InteropServices を宣言
using System.Runtime.InteropServices;
public class Win32
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr MessageBox(int hWnd, String text,
String caption, uint type);
}
class Program
{
static void Main(string[] args)
{
Win32.MessageBox(0, "テスト中~", "Platform Invoke Sample", 0);
}
}
CharSet.Auto にしているので、日本語というかUNICODEでそのまま使えました。
元のMessageBox
int MessageBox( HWND hWnd,PCTSTR pszText,PCTSTR pszCaption, UINT uType);
↓
.Net用
public static extern IntPtr MessageBox(int hWnd, String text,String caption, uint type);
とこのように書き換えているのですが、
基本的なデータ型は以下のように置き換えられます。
http://msdn2.microsoft.com/ja-jp/library/ac7ay120.・・・
HANDLE:void* → IntPtr
BYTE:unsigned char → Byte
LPCSTR:const char* → Stringまたは StringBuilder
という感じです。
各種のマーシャリングをあとで見て行きたいと思います。
文字列、参照渡し、配列、構造体、コールバック関数
その前に、
関数名の変更
エントリポイントを指定することにより、関数名を変更することが出来ます。
[DllImport("user32.dll",EntryPoint="MessageBox",CharSet = CharSet.Auto)]
public static extern IntPtr myMsg(int hWnd, String text,
String caption, uint type);
101. アンマネージ DLL の使用 - 1 - マネージコードとアンマネージコード - extern 修飾子 «
101. アンマネージ DLL の使用 »
101. アンマネージ DLL の使用 - 3 - 文字列、参照渡し
C# 入門 & 実践 / C sharp