类型为lpcwstr的char *参数的参数

时间:2014-12-28 19:56:18

标签: c++ winapi error-handling

我在c ++中收到错误“类型为lpcwstr的类型char *参数的argüment”如何修复?

char text[MAX_PATH]= {};
sprintf(text, "Number of Words: %S", computerName);
sprintf(text, "Number of Sentences: %S", userName);
sprintf(text, "Number of Digits: %d", objSystemInfo.dwNumberOfProcessors);
sprintf(text, "Number of Upper Case: %d", bit);
MessageBox(NULL, text , L"Sistem Bilgisi", MB_OK);

3 个答案:

答案 0 :(得分:1)

MessageBox接收LPCWSTR,你可以将它表示为wchar_t而不是char,并使用wsprintf写入wchar_t,如下所示:

wchar_t text[MAX_PATH]= {};
wsprintf(text, L"Number of Words: %s", computerName);
wsprintf(text, L"Number of Sentences: %s", userName);
wsprintf(text, L"Number of Digits: %d", objSystemInfo.dwNumberOfProcessors);
wsprintf(text, L"Number of Upper Case: %d", bit);
MessageBox(NULL, text , L"Sistem Bilgisi", MB_OK);

答案 1 :(得分:0)

请注意,LPCWSTR在winnt标头中定义为: typedef const WCHAR* LPCWSTR表示指向const宽字符的指针。 在您的情况下,文本是char表。如果您的项目使用UNICODE,则MessageBox的第二个参数必须是LPCWSTR。 因此,如果您尝试通过char text[MAX_PATH]= {};更改wchar_t text[MAX_PATH]= {};的声明,则会解决您的编译问题。 但是,您的MessageBox将显示一条空文本消息,如评论中所述,sprintf不会向您的文本变量添加文本。

答案 2 :(得分:0)

最简单的解决方案是改为呼叫MessageBoxA()

MessageBoxA(NULL, text, "Sistem Bilgisi", MB_OK);

否则,如果您继续拨打TCHARMessageBox(),则需要更新代码以使用TCHAR作为您的文字:

TCHAR text[MAX_PATH] = {};
_stprintf(text,
  _T("Computer Name: %ls\nUserName: %ls\nNumber of Processors: %u\nBit: %d"),
  computerName,
  userName,
  objSystemInfo.dwNumberOfProcessors,
  bit
);
MessageBox(NULL, text, TEXT("Sistem Bilgisi"), MB_OK);

否则,请致电WCHARMessageBox()并使用WCHAR作为您的文字:

WCHAR text[MAX_PATH] = {};
swprintf(text,
  L"Computer Name: %ls\nUserName: %ls\nNumber of Processors: %u\nBit: %d",
  computerName,
  userName,
  objSystemInfo.dwNumberOfProcessors,
  bit
);
MessageBoxW(NULL, text, L"Sistem Bilgisi", MB_OK);