VB6には「APIビューア」(VB 6 API Declaration Loader)というツールがついていました。この「APIビューア」というものはVBでWin32 APIを簡単に使えるようにするためのツールで、APIの定義が書かれたファイル(通常は「win32api.txt」など)を読み込むことにより、APIの検索とVBで使用する際の記述内容のコピーができるというものです。
この「APIビューア」ですが、.NETではなくなってしまいました。.NETではWin32 APIを使う必要はないと考えたのか、その辺の事情は分かりませんが、.NETになっても相変わらずWin32 APIの必要性がなくなったとは到底思えず、さらに使用する際の宣言のめんどくささも変わっていません。
そこでVB.NET、C#用のAPIビューアがないものかと思い探したところ、"Pramod K. Singh"さん作の"API Viewer"というツールを見つけました。このAPI Viewer"はVB6の"APIビューア"で使われていた"WIN32API.TXT"を読み込むことにより使用します。VB.NETだけでなく、C#にも対応しており(こちらが主のようですが)、大変便利です。
以下にWriteFile関数について取得した内容を"APIビューア"を使ったとき、およびこの"API Viewer"を使ったとき(VB.NET、C#)それぞれ載せておきます(改行されていますが、実際には一行です)。
[APIビューア] Public Declare Function WriteFile Lib "kernel32" Alias "WriteFile" _ (ByVal hFile As Long, lpBuffer As Any, _ ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, _ lpOverlapped As OVERLAPPED) As Long [VB.NET] Public Declare Function WriteFile Lib "kernel32" Alias "WriteFile" _ (ByVal hFile As Integer, lpBuffer As Any, _ ByVal nNumberOfBytesToWrite As Integer, _ lpNumberOfBytesWritten As Integer,<MarshalAs(UnmanagedType.Struct)> _ ByRef lpOverlapped As OVERLAPPED) As Integer [C#] [DllImport("kernel32.dll")] public static extern int WriteFile(int hFile,int lpBuffer, int nNumberOfbyte sToWrite,int lpNumberOfbyte sWritten, [MarshalAs(UnmanagedType.Struct)] ref OVERLAPPED lpOverlapped);
このように、私が試したところでは、VB.NETで出力した時、正しくないコードが出力されることが何回かありました。上の例でもVB.NETでは、「lpBuffer As Any」となっており、間違えています。C#での出力は問題ないようです。
このAPI Viewerを日本語化し、幾つかの不都合を修正されたものをAtrasWorldさんが「AtrasWorld Tool's Cafe」で公開されています。(コメントでご報告いただきました。)更新履歴の「2005/03/10」からダウンロードできます。
ApiViewer 2004はさらに高機能です。出力結果もより良いようです。出力コードはVB.NET、C#の他に、J++、Delphiなど多くの言語に対応しています。
起動時は何も読み込まれていない状態ですので、メニューの「File」-「Open」で適当なapvファイルを読み込む必要があります。
「Win32APIViewer .NET」はWeb上のAPIビューアサービスです。
このようなWin32 APIやアンマネージAPIをマネージコードから呼び出すためのPInvokeの記述を探すことのできるサイトとして、「PINVOKE.NET」があります。このサイトはWikiで、ユーザーがPInvokeの記述を追加、編集するようになっているため、まだ不完全な部分が多いようですが、これから拡充されていくでしょう。
また、Visual Studioから「PINVOKE.NET」を検索してその結果をエディタに挿入できるようにするプラグイン「PINVOKE.NET Add-In for Visual Studio 2003 and 2005」があります。
さらに「SharpDevelop」には、PInvokeの記述を簡単に挿入できる機能が搭載されています。
(この記事はメールマガジン「.NETプログラミング研究」で紹介したものです。)
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。