Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Подскажите по Visual Studio 2005


Автор: asmlover 31.5.2006, 22:51
Есть: Visual C++ 2005
Создаю новый прокет Windows 32 Application, совершенно пустой.
Создаю cpp и пытаюсь откомпилить
Код

#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
    MessageBox(NULL, "Сказала собака баскервилей.", "Ну, здравствуй, Герасим.", MB_OK|MB_ICONEXCLAMATION);
    return 0;
}

Получаю
main.cpp
c:\documents and settings\si\мои документы\visual studio 2005\projects\hello_world\hello_world\main.cpp(4) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [28]' to 'LPCWSTR'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Build log was saved at "file://c:\Documents and Settings\si\Мои документы\Visual Studio 2005\Projects\hello_world\hello_world\Debug\BuildLog.htm"
hello_world - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Блин, ну элементарные вещи не компилятся. 

Автор: maxim1000 31.5.2006, 23:48
MessageBox - макрос
в зависимости от того, определён UNICODE или нет, он раскрывается в MessageBoxA или MessageBoxW
(так сделано для многих функций в WinAPI)

в C++ для записи строки в Unicode нужно писать так: L"qqq"

просто раньше по умолчанию Unicode был отключён, а теперь - включён
изменить это можно, если порыться в настройках или в начале каждого файла поставить #define UNICODE или #undef UNICODE 

Автор: ElcnU 1.6.2006, 08:54
Код

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
    MessageBox(NULL, "Сказала собака баскервилей.", (LPCWSTR)"Ну, здравствуй, Герасим.", MB_OK|MB_ICONEXCLAMATION);
    return 0;
}

или
Код

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
    MessageBox(NULL, "Сказала собака баскервилей.", _TEXT("Ну, здравствуй, Герасим."), MB_OK|MB_ICONEXCLAMATION);
    return 0;
}




 

Автор: Earnest 1.6.2006, 17:21
Второй вариант, но первый параметр тоже надо завернуть в TEXT. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)