DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

.NET用のAPIビューア
PInvokeの記述を簡単に行う

API Viewer

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」からダウンロードできます。

API Viewer日本語版

ApiViewer 2004

ApiViewer 2004はさらに高機能です。出力結果もより良いようです。出力コードはVB.NET、C#の他に、J++、Delphiなど多くの言語に対応しています。

起動時は何も読み込まれていない状態ですので、メニューの「File」-「Open」で適当なapvファイルを読み込む必要があります。

ApiViewer 2004

Win32APIViewer .NET

Win32APIViewer .NET」はWeb上のAPIビューアサービスです。

PINVOKE.NET

このようなWin32 APIやアンマネージAPIをマネージコードから呼び出すためのPInvokeの記述を探すことのできるサイトとして、「PINVOKE.NET」があります。このサイトはWikiで、ユーザーがPInvokeの記述を追加、編集するようになっているため、まだ不完全な部分が多いようですが、これから拡充されていくでしょう。

また、Visual Studioから「PINVOKE.NET」を検索してその結果をエディタに挿入できるようにするプラグイン「PINVOKE.NET Add-In for Visual Studio 2003 and 2005」があります。

さらに「SharpDevelop」には、PInvokeの記述を簡単に挿入できる機能が搭載されています。

  • 履歴:
  • 2008/9/11 API ViewerとPINVOKE.NET Add-Inのリンク先を変更。ApiViewer 2004、Win32APIViewer .NETを追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。