如何将DWORD或char *类型的变量转换为LPCWSTR?

时间:2013-11-22 07:50:56

标签: c++ winapi msdn

给出一条消息:

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“OldWord” 但是我需要能够将DWORD或char *类型的变量转换为LPCWSTR的东西。

3 个答案:

答案 0 :(得分:2)

使用TCHAR代替char

TCHAR appStrt[] = _T("Application has already been started in a different window.");

至于你的第二个问题,你可能想检查a reference of CreateWindowEx,因为你在样式前的调用中缺少一个参数。

答案 1 :(得分:2)

没有简单的转换,只是从一开始就做正确的事情

TCHAR *appStrt = _T("Application has already been started in a different window.");

对于第二个示例,您的参数输入顺序错误。对于CreateWindowEx,第三个参数是窗口标题,第四个参数是窗口样式。你已经把窗口样式放在了窗口标题的位置。

作为一般原则,不要过于字面地使用编译器错误消息。如果编译器说不能将xxx转换为yyy,那么总是意味着你需要将xxx转换为yyy。这两个例子都说明了这一点。

答案 2 :(得分:0)

您可以使用MessageBoxA()代替,然后您不必转换char*数据(如果数据是在运行时动态分配而不是像您的示例中那样静态分配,则非常有用 - 否则,请使用{ {1}}然后拨打MultiByteToWideChar())。

对于MessageBoxW(),您将在CreateWindowEx()参数而不是lpWindowName参数中传递窗口样式值,这就是编译器抱怨dwStyle的原因。