请高手救救我!!!!(unicode)

时间:2021-09-13 20:19:17
BOOL TWin::Create(LPCSTR className, LPCSTR title, DWORD style, DWORD exStyle, HMENU hMenu)
{
if (className == NULL)
className = TApp::defaultClass;

TApp::AddWin(this);
if ((hWnd = ::CreateWindowEx(exStyle, className, title, style, rect.left, rect.top, rect.right, rect.bottom, parent ? parent->hWnd : NULL, hMenu, TApp::hI, NULL)) == NULL)
return TApp::DelWin(this), FALSE;
else
return TRUE;
}


上面的一个方法,正常编译没有错误。
但我要编译成unicode形势。就出错了。
错误是这样的。

D:\vcworkspace\tmp\Src\Twin.cpp(39) : error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char *' to 'const unsigned short *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast


请高手救救我!!!

9 个解决方案

#1


改成
BOOL TWin::Create(LPCSTR className, LPCTSTR title, DWORD style, DWORD exStyle, HMENU hMenu)
{
if (className == NULL)
className = TApp::defaultClass;

TApp::AddWin(this);
if ((hWnd = ::CreateWindowEx(exStyle, className, title, style, rect.left, rect.top, rect.right, rect.bottom, parent ? parent->hWnd : NULL, hMenu, TApp::hI, NULL)) == NULL)
return TApp::DelWin(this), FALSE;
else
return TRUE;
}

#2


LPCSTR用LPCTSTR替换

#3


把所有使用char*定义变量的地方换为LPTSTR/TCHAR*或LPCTSTR/const TCHAR*(对应于const char*).

把所有的字符串常量用_T()宏包起来,比如 TCHAR* szText = _T("我的Text");

所有的C库字符串操作函数也做相应的替换,比如
strlen ->_tcslen
strcat ->_tcscat
strcmp ->_tcscmp

#4


如果要用字符集转换就一定要记住使用_T()

#5


不好用呀
CreateWindowEx 这个方法的第二个参数是LPCSTR 类型的。
为什么传递一个LPCSTR 类型的参数不行呢?

#6


好用了
谢谢了
但我不知道为什么
要把LPCSTR 变成LPCTSTR

#7


是LPCTSTR型,在Unicode下就是const unsigned short*
LPCSTR不论在Unicode还是ASCII下都是const char*

#8


谢谢
我明白了

#9


我这几天作unicode
出现很多问题。
为什么那么多的软件不编译成unicode的呢

#1


改成
BOOL TWin::Create(LPCSTR className, LPCTSTR title, DWORD style, DWORD exStyle, HMENU hMenu)
{
if (className == NULL)
className = TApp::defaultClass;

TApp::AddWin(this);
if ((hWnd = ::CreateWindowEx(exStyle, className, title, style, rect.left, rect.top, rect.right, rect.bottom, parent ? parent->hWnd : NULL, hMenu, TApp::hI, NULL)) == NULL)
return TApp::DelWin(this), FALSE;
else
return TRUE;
}

#2


LPCSTR用LPCTSTR替换

#3


把所有使用char*定义变量的地方换为LPTSTR/TCHAR*或LPCTSTR/const TCHAR*(对应于const char*).

把所有的字符串常量用_T()宏包起来,比如 TCHAR* szText = _T("我的Text");

所有的C库字符串操作函数也做相应的替换,比如
strlen ->_tcslen
strcat ->_tcscat
strcmp ->_tcscmp

#4


如果要用字符集转换就一定要记住使用_T()

#5


不好用呀
CreateWindowEx 这个方法的第二个参数是LPCSTR 类型的。
为什么传递一个LPCSTR 类型的参数不行呢?

#6


好用了
谢谢了
但我不知道为什么
要把LPCSTR 变成LPCTSTR

#7


是LPCTSTR型,在Unicode下就是const unsigned short*
LPCSTR不论在Unicode还是ASCII下都是const char*

#8


谢谢
我明白了

#9


我这几天作unicode
出现很多问题。
为什么那么多的软件不编译成unicode的呢