错误C2664:' SetDlgItemTextW' :无法转换参数3来自' SYSTEMTIME'到LPCWSTR' 208

时间:2013-08-14 21:20:34

标签: winapi unicode ansi

在win32 api中使用UNICODE和ANSI理解这一点仍然有些麻烦。

例如,我有这段代码:

SYSTEMTIME LocalTime = { 0 };
GetSystemTime (&LocalTime);
SetDlgItemText(hWnd, 1003, LocalTime);'

这会在标题中生成错误。

另外,我应该提一下,它在“setdlgitemtext”之后自动添加一个W可能是VS中的一些宏。

有人可以为我澄清一下吗?

1 个答案:

答案 0 :(得分:1)

在C或C ++中,您不能只采用任意结构并将其传递给需要字符串的函数。您必须先将该结构转换为字符串。

Win32函数GetDateFormat()GetTimeFormat()可用于将SYSTEMTIME转换为字符串(第一个执行“日期”部分,第二个执行“时间”部分)根据当前的系统区域设置规则。

例如,

SYSTEMTIME LocalTime = { 0 };
GetSystemTime (&LocalTime);
wchar_t wchBuf[80];
GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &LocalTime, NULL, wchBuf, sizeof(wchBuf) / sizeof(wchBuf[0]));
SetDlgItemText(hWnd, 1003, wchBuf);