Windows 程序设计(第五版)
在测试本书第34页的程序时出现了这个问题:
严重性 代码 说明 项目 文件
错误(活动) E0167 "const wchar_t *" 类型的实参与 "TCHAR *" 类型的形参不兼容 Project12 D:\Users\csq\source\repos\Project12\Project12\WINDOWS.cpp 28
我是照着书本的代码打的:
#define _CRT_SECURE_NO_WARNINGS
#include<windows.h>
#include<tchar.h>
#include<stdio.h>
int CDECL MessageBoxPrintf( TCHAR * szCaption, TCHAR *szFormat, ...)
{
TCHAR szBuffer[1024];
va_list pArgList;
//The va_start macro (defined in STDARG.H) is usually equivalent to:
//pArgList=(char *) &szFormat + sizeof(szFormat);
va_start(pArgList, szFormat);
_vsntprintf(szBuffer, sizeof(szBuffer) / sizeof(TCHAR), szFormat, pArgList);
va_end(pArgList);
return MessageBox(NULL, szBuffer, szCaption, 0);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
int cxScreen, cyScreen;
cxScreen = GetSystemMetrics(SM_CXSCREEN);
cyScreen = GetSystemMetrics(SM_CYSCREEN);
MessageBoxPrintf(TEXT("ScrnSize"), TEXT("The screen is %i pixels wide by %i pixels high."), cxScreen, cyScreen);
return 0;
}
网上查找解决方法:解决方法
改后的代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<windows.h>
#include<tchar.h>
#include<stdio.h>
int CDECL MessageBoxPrintf(const TCHAR * szCaption,const TCHAR *szFormat, ...)
{
TCHAR szBuffer[1024];
va_list pArgList;
//The va_start macro (defined in STDARG.H) is usually equivalent to:
//pArgList=(char *) &szFormat + sizeof(szFormat);
va_start(pArgList, szFormat);
_vsntprintf(szBuffer, sizeof(szBuffer) / sizeof(TCHAR), szFormat, pArgList);
va_end(pArgList);
return MessageBox(NULL, szBuffer, szCaption, 0);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
int cxScreen, cyScreen;
cxScreen = GetSystemMetrics(SM_CXSCREEN);
cyScreen = GetSystemMetrics(SM_CYSCREEN);
MessageBoxPrintf(TEXT("ScrnSize"), TEXT("The screen is %i pixels wide by %i pixels high."), cxScreen, cyScreen);
return 0;
}
成功运行: