.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エラー・コードを取得するには?
INIファイルを読み書きするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

@IT Special

- PR -

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH