Как преобразовать переменную типа DWORD или char * в LPCWSTR?

0

Учитывая сообщение:

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.

Теги:
winapi
msdn

3 ответа

2
Лучший ответ

Используйте TCHAR вместо char:

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

Что касается второй проблемы, вы можете проверить ссылку CreateWindowEx поскольку вам не хватает аргумента в вызове перед стилями.

  • 0
    он говорит, что "_T" не определено, спасибо за ответ по второй проблеме, которая сработала.
  • 0
    #include <tchar.h>
Показать ещё 3 комментария
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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню