{
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;
}
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
把所有的字符串常量用_T()宏包起来,比如 TCHAR* szText = _T("我的Text");
所有的C库字符串操作函数也做相应的替换,比如
strlen ->_tcslen
strcat ->_tcscat
strcmp ->_tcscmp
#4
如果要用字符集转换就一定要记住使用_T()
#5
不好用呀
CreateWindowEx 这个方法的第二个参数是LPCSTR 类型的。
为什么传递一个LPCSTR 类型的参数不行呢?
CreateWindowEx 这个方法的第二个参数是LPCSTR 类型的。
为什么传递一个LPCSTR 类型的参数不行呢?
#6
好用了
谢谢了
但我不知道为什么
要把LPCSTR 变成LPCTSTR
谢谢了
但我不知道为什么
要把LPCSTR 变成LPCTSTR
#7
是LPCTSTR型,在Unicode下就是const unsigned short*
LPCSTR不论在Unicode还是ASCII下都是const char*
LPCSTR不论在Unicode还是ASCII下都是const char*
#8
谢谢
我明白了
我明白了
#9
我这几天作unicode
出现很多问题。
为什么那么多的软件不编译成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;
}
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
把所有的字符串常量用_T()宏包起来,比如 TCHAR* szText = _T("我的Text");
所有的C库字符串操作函数也做相应的替换,比如
strlen ->_tcslen
strcat ->_tcscat
strcmp ->_tcscmp
#4
如果要用字符集转换就一定要记住使用_T()
#5
不好用呀
CreateWindowEx 这个方法的第二个参数是LPCSTR 类型的。
为什么传递一个LPCSTR 类型的参数不行呢?
CreateWindowEx 这个方法的第二个参数是LPCSTR 类型的。
为什么传递一个LPCSTR 类型的参数不行呢?
#6
好用了
谢谢了
但我不知道为什么
要把LPCSTR 变成LPCTSTR
谢谢了
但我不知道为什么
要把LPCSTR 变成LPCTSTR
#7
是LPCTSTR型,在Unicode下就是const unsigned short*
LPCSTR不论在Unicode还是ASCII下都是const char*
LPCSTR不论在Unicode还是ASCII下都是const char*
#8
谢谢
我明白了
我明白了
#9
我这几天作unicode
出现很多问题。
为什么那么多的软件不编译成unicode的呢
出现很多问题。
为什么那么多的软件不编译成unicode的呢