我在我的 .cpp 程序中包含以下文件:
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
尽管如此,当我写下以下内容 ,
LPCTSTR pMsg;
DWORD msgLen;
...
msgLen = _tcslen(pMsg);
编译器提示以下错误:
当然,我可以轻松地通过转换为C2664: 'size_t strlen(const char *)' : cannot convert argument 1 from 'LPCTSTR' to 'const char *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
LPCSTR
或使用 wcslen
来解决这个问题。但这不对,编译器应该根据宏 UNICODE
自己决定所有这些东西,对吧?它肯定已经定义了,因为当我在文件开头写入 #define UNICODE
时,编译器会提示警告,说它已经定义了。那么问题是什么呢?为什么它选择了 strlen
而不是 wcslen
?这是实际代码:
BOOL PrintString(HANDLE hOut, ...)
{
DWORD msgLen, count;
LPCTSTR pMsg;
va_list pMsgList;
va_start(pMsgList, hOut);
while((pMsg = va_arg(pMsgList, LPCTSTR)) != NULL)
{
msgLen = _tcslen(pMsg);
if(!WriteConsole(hOut, pMsg, msgLen, &count, NULL) && !WriteFile(hOut, pMsg, msgLen*sizeof(TCHAR), &count, NULL))
{
va_end(pMsgList);
return FALSE;
}
}
va_end(pMsgList);
return TRUE;
}
我尝试了两种定义:#define _UNICODE
和 #define _UNICODE
,但是都没有帮助。此外,#define _UNICODE
提示它已经被定义了。
_UNICODE
而不是UNICODE
。您是否正确定义了它? - Angew is no longer proud of SOUNICODE
和/或_UNICODE
,但没有帮助。 - nicks