ホームページ  >  記事  >  バックエンド開発  >  C# での FormatMessage API の呼び出しに関する詳細な紹介

C# での FormatMessage API の呼び出しに関する詳細な紹介

黄舟
黄舟オリジナル
2017-03-15 10:10:041732ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。