通常,.NETプログラミングでは.NET Frameworkに用意されているクラス・ライブラリを利用する。ただ,現在の.NET Framework 1.1には,すべてのWindows API相当の機能が用意されているわけではない。例えば,LAN上のコンピュータを列挙するためのクラスは用意されておらず,Win32 APIのWNetOpenEnumを使わなければならない。

 だからといって.NETでは,LAN上のコンピュータを列挙できないわけではない。.NETには,PInvoke(Platform Invocation Services)と呼ぶOSのネイティブAPIを呼び出す仕組みが用意されている。PInvokeを使っても,アンセーフやアンマネージになるわけではない。.NETの安全性は保たれる。

 たが,PInvokeを利用するためには,DllImportアトリビュートを利用した宣言文を記述する必要がある。さらに,Win32 APIでは,独自のデータ型や構造体が多く利用されており,これらの宣言文も.NET向けに書かなければならない。実際,PInvokeを利用するときは,これらの記述が面倒だ。

 Adam_Nathan氏は2004年5月6日,PInvokeのための宣言文の入力を支援するツール「PINVOKE.NET Add-In for Visual Studio」を開発し,GotDotNetのWebサイトで無償公開している。その名が示すように,Visual Studio .NETのアドインとして作られている。インストール後,ソース・コード編集画面で右クリックすると「Insert PInvoke Signatures」メニューが表示される。このメニューをクリックし,現れたダイアログ・ボックスに関数名や構造体名を入力すると,その宣言文が現在のカレット位置に入力される。

 このツールは,PINVOKE.NETに公開されているPInvokeのための宣言文情報を,XML Webサービスを使って検索,取得するものである。これまでも,このサイトでPInvokeのための宣言文情報を検索し,コピー&ペーストすることで,PInvokeのための宣言文をスクラッチで記述しなくても済ませることができた。このツールによって,より一層便利になる。

 ただし,PINVOKE.NETはAdam_Nathan氏によって運営されているサイトで,すべてのWin32 APIの宣言文が登録されているわけではない。もしもまだ登録されていないAPI/構造体の宣言文を独自に記述したら,PINVOKE.NETに登録しよう。PINVOKE.NET Add-In for Visual Studioには,登録機能も実装されている。なお,実際にVisual Studio .NET 2003日本語版にインストールしたところ,正しく動作した。

(山口 哲弘=日経Windowsプロ