DLL や Win32 API の関数を C# から呼び出す
C#などのマネージドコードからアンマネージコードのDLLやWindows Native APIを呼び出すには、P/Invokeを使用してたとえば以下のように関数宣言を行い、
public const int CF_BITMAP = 2;
[DllImport("user32.dll")]
public static extern IntPtr SetClipboardData(uint uFormat, IntPtr obj);
その上で、次のように呼び出します。
SetClipboardData(CF_BITMAP, hBitmap);
このように簡単にできるのですが、利用する関数の数が多い場合は関数定義を行うのがかなり大変になります。
この労力を軽減する方法として、2つを紹介します。
■ pinvoke.net
WIN32 APIであれば、ほとんどがサイト http://www.pinvoke.net に載っています。
こちらを検索してコピペすればOKです。
■ 関数宣言を自動生成してくれるツール
MicrosoftのInteropチームが作成したツール「P/Invoke Interop Assistant」があります。
こちらからダウンロードできます。⇒ P/Invoke Interop Assistant
ビルドして起動すると、2つのタブがあります。
[SigImp Search]タブからは、windows.hファイルに含まれる型情報を検索することができます。
P/Invokeコードを生成したい要素を選択し、[Generate]ボタンを押すと、右側のペインにソースコードが生成されます。
この画面例はC#ですが、Visual Basicも可能です。
[SigImp Translate Snippet]タブからは、C/C++のヘッダ情報を基に、P/Invokeコードを生成できます。
例えばTEXTMETRIC構造体を変換すると以下のようになります。