FormatMessage は WINDOWS が提供する API で、Windows API を呼び出した際に返されるエラーコードに対応するテキスト情報を取得するために使用されます。以前は VB で使用されていましたが、 では使用されていませんでした。 C#、主に、C# で Windows API を呼び出すいくつかのルールについてあまり知りません。 +最近、VC ++ Win32 用の携帯電話プログラムの開発に非常に興味があります。当然、C++ を使用する必要があるため、このメソッドを C# で呼び出します。 C++ で直接使用してみてはいかがでしょうか?携帯電話での
デバッグ は少し面倒なので、コードをあまり書きたくないのですが、それでも C# の方がはるかに便利で高速です。 DWORD WINAPI FormatMessage(
in
DWORD dwFlags,
in
LPCVOID lpSource,
in
DWORD dwMessageId,
in
DWORD dwLanguageId,
out
LPTSTR lpBuffer,
in
DWORD nSize,
in
va_list* Arguments
);
const int FORMAT_MESSAGE_FROM_SYSTEM = 0x1000;
const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x200;
[DllImport("Kernel32.dll")]
private static extern int FormatMessage(uint dwFlags, IntPtr lpSource, uint dwMessageId, uint dwLanguageId,
[Out]StringBuilder lpBuffer, uint nSize, IntPtr arguments);
これは C# での FormatMessage API のプロトタイプと定義です。2 番目と最後のパラメーターは使用されないため、int の場合は呼び出し時に 0 または IntPtr を渡し、次に IntPtr を渡します。 。ゼロ。 L さらに厄介なのは、返されたテキスト情報を受け取るために使用される LPBUFFER パラメーターです。VB では、このタイプのパラメーターは byval 文字列として定義され、スペース (長さ) を使用して初期化されます (
の初期化)。
文字列 を長さを指定するスペースに初期化する)、呼び出すときに nSize の長さの値を指定するだけです。 C# では、パラメーターは String LPBuffer として定義されます。呼び出し時: uint dwFlags= FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS ;
string lpBuffer=new string(' ',260);
int count=FormatMessage(dwFlags,IntPtr.Zero,1439,0,lpBuffer,260,IntPtr.Zero);
は戻り値を通じて
が正常に呼び出されたことを知ることができますが、LPBuffer の値はわかりません。変更されました。
ref と out に変更しようとしましたが、機能しません。out は関数呼び出しが失敗したことを意味します。 出力パラメーターを文字列として定義しませんでした。最後に、StringBuilder に変更し、[OUT]
属性変更を使用します。呼び出し時:
StringBuilder lpBuffer=new StringBuilder(260); //声明StringBuilder的初始大小 int count=FormatMessage(dwFlags,IntPtr.Zero,1439,0,lpBuffer,260,IntPtr.Zero);E
以上がC# での FormatMessage API の呼び出しに関する詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。