请教windows核心编程 ErrorShow程序例子问题

刚刚学习win32 有个问题
TCHAR buffer[100];

case WM_PAINT:
{
hdc = BeginPaint (hwnd, &ps) ;
DWORD systemLocale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);
DWORD dwError = 1;
HLOCAL hlocal = NULL;
BOOL fOk = FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwError, systemLocale,
(PTSTR) &hlocal, 100, NULL);
if (fOk && (hlocal != NULL)) {
TextOut(hdc,0,0,buffer,wsprintf(buffer,TEXT("%s"),(PCTSTR) LocalLock(hlocal)));
MessageBox(NULL, (PCTSTR) LocalLock(hlocal), TEXT("Error"), MB_OK);

LocalFree(hlocal);
}
EndPaint (hwnd, &ps) ;
return 0 ;
}
书上的例子SetDlgItemText和MessageBox可以正常显示
为什么TextOut在显示的时候多两个字符是两个竖 显示为(函数不正确。||)
用wsclen()获得长度是8

是不是wsprintf和wsclen()用的不对 请说具体一点 谢谢

你用的是什么环境,取决于windows api中的宏定义,你用的是unicode版本的api还是ansi的,如果是unicode的,用_L转换下

打印的是中文还是什么其他字符串,用英文试试呢,看上去是你的编码格式有问题

调用API前用RtlZeroMemory清空一下缓冲区
确定TextOut已经定位到正确的函数上了,比如unicode版本确保TextOut被定义为TextOutW