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

How do I convert variable of type DWORD or char* to LPCWSTR?

本文关键字:变量 转换 LPCWSTR 类型 DWORD char      更新时间:2023-10-16

给定一条消息:

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的原因。