"C2664: 'FormatMessageA' : 5 番目の引数を 'LPTSTR *' から 'LPSTR' に変換できません。" に関する原因と対処

このコンパイルエラーの原因と対処に関して説明します。

スポンサード リンク

Microsoft Visual C++にて以下のソースでコンパイルエラーが発生します:

コンパイルエラーメッセージ:
error C2664: 'FormatMessageA' : 5 番目の引数を 'LPTSTR *' から 'LPSTR' に変換できません。

ソース(バグ有り):

#define _CRT_SECURE_NO_DEPRECATE 1
#include "StdAfx.h"
#include "windows.h"

int main()
{
LPTSTR lpBuffer = NULL;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), LANG_USER_DEFAULT, &lpBuffer, 0, NULL );
MessageBoxEx(NULL, lpBuffer, "直前のエラーメッセージ", MB_OK,0);
LocalFree(lpBuffer); }


原因:
FormatMessage 関数の5番目の引数の型に誤りがあります。

対処:
FormatMessage 関数の5番目の引数の型をキャストして(LPTSTR)に修正します。


ソース(修正済み):

#define _CRT_SECURE_NO_DEPRECATE 1
#include "StdAfx.h"
#include "windows.h"

int main()
{
LPTSTR lpBuffer = NULL;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), LANG_USER_DEFAULT, (LPTSTR)&lpBuffer, 0, NULL );
MessageBoxEx(NULL, lpBuffer, "直前のエラーメッセージ", MB_OK,0); LocalFree(lpBuffer); }

スポンサード リンク



[コンパイルエラーコード、メッセージに戻る]