2013-11-22 82 views
0

給定一個消息:如何將DWORD或char *類型的變量轉換爲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不抱怨嗎? 我在下面的代碼peice的同樣的問題:

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。

回答

2

使用TCHAR代替char

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

至於你的第二個問題,你可能要檢查a reference of CreateWindowEx因爲你缺少的風格之前調用的參數。

+0

它說「_T」是未定義的,謝謝你對第二個問題的回答,那有效。 – Urler

+0

'#include ' – john

+0

@YuriSwarovski您可能想要[在MSDN上閱讀此內容](http://msdn.microsoft.com/zh-cn/library/c426s321%28v=vs.110%29.aspx)。 –

2

有沒有簡單的轉換,剛開始用正確的事擺在首位

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

對你有錯誤的順序您的參數第二個例子。對於CreateWindowEx,第三個參數是窗口標題,第四個參數是窗口樣式。你已經把窗口樣式放在窗口標題應該去的地方。

作爲一般原則,不要直接編譯錯誤消息。如果編譯器說不能將xxx轉換爲yyy,那麼總是意味着您確實需要將xxx轉換爲yyy。這些例子都說明了這一點。

0

您可以使用MessageBoxA()代替,那麼你就不必你char*數據轉換(尤其是有用的,如果該數據是在運行時動態分配的,而不是靜態地喜歡你的榜樣 - 否則,使用MultiByteToWideChar()然後調用MessageBoxW())。

至於CreateWindowEx(),要傳遞的lpWindowName參數,而不是dwStyle參數的窗口樣式值,這就是爲什麼編譯器抱怨LPCWSTR