我将一些代码从VC6项目复制到vc ++ 2010项目,但代码无法编译。 错误是'wsprintfW':无法将参数1从'char *'转换为'LPWSTR',问题代码为:
inline bool RingCtrl::BuildPathAndName(char* pBuf, int bufSize, int8 priority, int idxNumber) const
{
wsprintf(pBuf, "%s\\R%u%06x.DAT", _directory, (int)priority, idxNumber);
return true;
}
wsprintf
在wmcommn.h
中的定义如下:
WINUSERAPI
int
WINAPIV
wsprintfA(
__out LPSTR,
__in __format_string LPCSTR,
...);
WINUSERAPI
int
WINAPIV
wsprintfW(
__out LPWSTR,
__in __format_string LPCWSTR,
...);
#ifdef UNICODE
#define wsprintf wsprintfW
#else
#define wsprintf wsprintfA
#endif
答案 0 :(得分:0)
您正在构建定义了UNICODE
的程序(在VC ++ 2010中是默认的),而在VC6中没有定义它。定义UNICODE
后,wsprintf
将wchar_t*
代替char*
作为第一个参数(而const wchar_t*
代替const char*
作为第二个参数)。
简单的解决方案是在wsprintfA
中明确调用wsprintf
而不是RingCtrl::BuildPathAndName
,但在这种情况下,您会遇到Unicode文件名的问题。您可能会将许多其他类似错误连接到UNICODE
和_UNICODE
,因此您可能希望在VC ++ 2012中更改项目设置:项目属性 - >常规 - &gt ;字符集 - >使用多字节字符集。
正确的解决方案是从char*
转移到wchar_t*
(甚至更好地转移到TCHAR*
),但这可能需要付出很多努力。