« 構造体/クラスプロパティを展開可能にする(4)[最終回] | トップページ | ListView/TreeViewにオーバーレイアイコンを表示する »

2010年10月10日 (日)

Win32APIで発生したエラー処理(GetLastError 処理相当の処理)

備忘録として書いておきます。

Win32API宣言時のDllImportに、"SetLastError=true" を付加する。

[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]

プログラムコード上で実際に、GetLastError を実行したい部分では、GetLastError の代わりに、Marshal.GetLastWin32Error() を使用する。

エラーコード一覧は、下記サイトなんかがいいのではないでしょうか(回線速度によっては使えないかも)。
http://ir9.jp/prog/ayu/win32err.htm

また、エラー発生時に例外を発生させる場合は、

throw new Win32Exception(Marshal.GetLastWin32Error());
又は
throw new Win32Exception(Marshal.GetLastWin32Error(), "(補足情報)");

といった記述のほか、以下の様な記述も出来ます。

int hResult = Marshal.GetHRForLastWin32Error();
Marshal.ThrowExceptionForHR(hResult);

※この場合、Marshal.GetExceptionForHR を使用して、より柔軟な例外コード記述も可能

« 構造体/クラスプロパティを展開可能にする(4)[最終回] | トップページ | ListView/TreeViewにオーバーレイアイコンを表示する »

覚え書き」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Win32APIで発生したエラー処理(GetLastError 処理相当の処理):

« 構造体/クラスプロパティを展開可能にする(4)[最終回] | トップページ | ListView/TreeViewにオーバーレイアイコンを表示する »