Учитывая сообщение:
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.
Используйте 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
.
#include <tchar.h>