如何将DWORD或char*类型的变量转换为LPCWSTR
How do I convert variable of type DWORD or char* to LPCWSTR?
给定一条消息:
char *appStrt = "Application has already been started in a different window.";
我正试图在以下功能中使用它:
MessageBox(NULL, appStrt, // (LPCTSTR) appStrt cast doesn't work here
appRun,
MB_ICONWARNING | MB_OK);
如何将appStrt转换为LPCSTR,使MessageBox不会抱怨?我在以下代码中也有同样的问题:
DWORD dwStyle;
m_hWnd = CreateWindowEx(dwStyleEx,
m_pszClassName,
dwStyle | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, // complains here about dwStyle
0,
etc.
CreateWindowEx还抛出一个错误,指出dwStyle的类型应该是LPCWSTR。我在网上搜索过,但只找到了以下转换:LPCWSTR newWord=L"旧单词"但我需要一些东西,将DWORD或char*类型的变量转换为LPCWSTR。
使用TCHAR
而不是char
:
TCHAR appStrt[] = _T("Application has already been started in a different window.");
至于第二个问题,您可能需要检查CreateWindowEx
的引用,因为在样式之前的调用中缺少一个参数。
没有简单的转换,只需首先从正确的东西开始
TCHAR *appStrt = _T("Application has already been started in a different window.");
对于第二个示例,您的参数顺序错误。对于CreateWindowEx,第三个参数是窗口标题,第四个参数是窗样式。您已经将窗口样式放在了窗口标题应该放的位置。
一般来说,不要把编译器错误消息看得过于字面。如果编译器说不能将xxx转换为yyy,则并不总是意味着您确实需要将xxx转换成yyy。这两个例子都说明了这一点。
您可以使用MessageBoxA()
,这样就不必转换char*
数据(如果数据是在运行时动态分配的,而不是像您的示例中那样静态分配,则特别有用-否则,请使用MultiByteToWideChar()
,然后调用MessageBoxW()
)。
至于CreateWindowEx()
,您在lpWindowName
参数而不是dwStyle
参数中传递窗口样式值,这就是编译器抱怨LPCWSTR
的原因。
相关文章:
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 是否可以将已经初始化的变量转换为 void*?
- C++字符串类如何将一个变量转换为另一个变量?
- std::chrono::time_point 从变量转换时编译器错误
- std::变量转换构造函数行为
- 尝试将字符串变量转换为布尔值会导致 "true" 和 "false" 都等于 0
- C++将字符变量转换为字符串变量将返回 ASCII 值
- 将大端序的 32 位变量转换为小端序
- 在代码优化过程中,C++11编译器是否会在可能的情况下将局部变量转换为右值
- 有符号浮点变量转换为无符号DWORD
- 将初始变量转换为已声明的变量
- 将C++字符串变量转换为long
- 如何将DWORD或char*类型的变量转换为LPCWSTR
- 如何在 c++ 中将包含时间的字符串变量转换为time_t类型
- C++变量转换为模板参数
- 将 [char] 变量转换为 [int],然后再转换回 [char]
- 如何将 int 变量转换为 ASCII 单词
- 将c++类的私有变量转换为公有变量
- 将变量转换为const
- 如何将方法返回的接口变量转换为对象