“技術者”としてのホリエモンが語るWeb開発とは?

スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 

.NET TIPS

Win32 API呼び出しを手軽に記述するには?

デジタルアドバンテージ
2004/06/04

 .NETプログラムからWin32 APIを呼び出すには、「TIPS:Win32 APIやDLL関数を呼び出すには?」で解説しているように、次のようなWin32 APIの宣言が事前に必要となる(C#の場合)。

[DllImport("kernel32.dll")]
extern static bool Beep(uint dwFreq, uint dwDuration);

 このため、通常の.NET Framework上のメソッドの呼び出しと比べて、Win32 APIの呼び出しはコーディングが少し面倒だ。そこで本稿では、このWin32 APIの宣言部分のコーディングを簡略化する方法を紹介する。

 その方法とは、「PINVOKE.NETアドイン」というVisual Studio .NET(以降、VS.NET)用のアドイン・ツールを使うことである。PINVOKE.NETアドインは、Win32 APIの宣言部分のコードを生成するためのツールである。これにより、Win32 APIのDLL名やパラメータの型などをいちいち調べなくてもWin32 APIを呼び出せるようになるので大変便利だ。このツールでは主に、C#とVB.NETのコードを生成できる。

 ただし、VS.NET用のアドインなので、使用するにはVS.NETが必須である。また、Win32 APIの宣言をインターネット上のサーバ(www.pinvoke.net)から取得するので、インターネットに接続できる必要がある。

 まずは、PINVOKE.NETアドインを入手して、インストールしよう。

PINVOKE.NETアドインの入手とインストール

 PINVOKE.NETアドインは、次のサイトからダウンロードして入手できる(次のサイトを訪れて、アドイン・ツールのタイトル名をクリックするとダウンロードできる)。

 ダウンロードしたpinvoke.zipファイルを解凍して、その中にあるSetup.exeを実行すればインストールが行われる。インストールでは、画面の指示(英語)に従ってインストールしてほしい(基本的に[Next]ボタンを押せばよい)。

 インストールが完了すれば、さっそくVS.NET上でPINVOKE.NETアドインが使用できるはずだ。

PINVOKE.NETアドインの使用方法

 PINVOKE.NETアドインを使用するには、まずVS.NETを起動して、Win32 APIを使用したいソース・ファイルを開く。そして、Win32 APIの宣言を追加したい位置で右クリックしてコンテキスト・メニューを表示する。そのメニューから[Insert PInvoke Signatures]を選択する。

PINVOKE.NETアドインの呼び出し
Win32 APIを使用したいソース・ファイルをVS.NETのコード・エディタで開いて、Win32 APIの宣言を追加したい位置で右クリックしてコンテキスト・メニューを表示し、そのメニューから[Insert PInvoke Signatures]を選択する。

 すると、[Insert PInvoke Signatures]ダイアログが表示される。このダイアログでWin32 APIを検索し、検索結果から使用したいWin32 APIの宣言を選択する。次の画面は、このダイアログで「Beep」というWin32 APIを検索して、検索結果からC#版の宣言を選択したところだ。

[Insert PInvoke Signatures]ダイアログ
Win32 APIを検索して宣言を選択する。
  Win32 APIの名前(この例では「Beep」)を入力する。
  [Go]ボタンをクリックすると、Win32 APIの検索が行われる。
  検索されたAPIの宣言の言語(この例では「C#」)を選択する。
  [Insert]ボタンをクリックすると、Win32 APIの宣言が挿入される。このボタンではダイアログは閉じられない。
  [Close]ボタンをクリックするとダイアログを閉じることができる。

 上のダイアログでWin32 APIの宣言の挿入が実行されると、実際には次のようなコードが追加される。

 [DllImport("kernel32.dll", SetLastError=true)]
static extern bool Beep(uint dwFreq, uint dwDuration);
PINVOKE.NETによって追加されたC#の宣言
 
Declare Function Beep Lib "kernel32.dll" (dwFreq As Integer, _
  dwDuration As Integer) As Boolean
PINVOKE.NETによって追加されたVB.NETの宣言

 なお、「PINVOKE.NETアドインの呼び出し」の画面で右クリックして表示されるコンテキスト・メニューから[Contribute PInvoke Signatures and Types]を選択した場合、Win32 APIの宣言をサーバへ追加するためのダイアログが表示される。もしPINVOKE.NETアドインで検索してWin32 APIの宣言が存在しなければ、このダイアログを使って項目追加に協力することができる。ただし、実際に追加されるまでには数日かかるようだ。End of Article

カテゴリ:Visual Studio .NET 処理対象:アドイン
カテゴリ:クラス・ライブラリ 処理対象:Win32 API
関連TIPS:Win32 APIやDLL関数を呼び出すには?
 
この記事と関連性の高い別の.NET TIPS
Win32 APIやDLL関数を呼び出すには?
Win32 APIのWin32エラー・コードを取得するには?
実行ファイルからアプリケーションのアイコンを取得するには?
Win32 APIやDLL関数に文字列や文字列バッファを渡すには?
INIファイルを読み書きするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」
Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
@IT Sepcial
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Sepcial
ソリューションFLASH