Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Проблема с использованием старого кода в VC 2008


Автор: larionov0ilia 14.10.2010, 11:29
Решил изучать программирование на WinApi
Скачал справочное руководство по ссылке «http://cracklab.ru/download.php?action=get&n=NjM1» это архив статей по С++ World C++ Pro 6600+

Там есть(в статье Visual C++. API-функции Урок 1. Простое окошко)
листинг создания простого окна

Код

#include <windows.h>
LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR     lpCmdLine,
                   int       nCmdShow)
{
    HWND hwnd;
    MSG msg;
    WNDCLASS w;
    memset(&w,0,sizeof(WNDCLASS));
    w.style = CS_HREDRAW | CS_VREDRAW;
    w.lpfnWndProc = WndProc;
    w.hInstance = hInstance;
    w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    w.lpszClassName = "My Class";
    RegisterClass(&w);
    hwnd = CreateWindow("My Class", "My title", WS_OVERLAPPEDWINDOW,
        300, 200, 200, 180, NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
    switch (Message){
    case WM_DESTROY: 
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, Message, wparam, lparam);
    } 
    return 0;
}




Создаю проект Win32(пустой) в VC 2008 на winXP sp3, пытаюсь скомпилировать этот пример вываливаются ошибки
Цитата

------ Построение начато: проект: example7, Конфигурация: Debug Win32 ------
Компиляция...
example7.cpp
c:\pr1\example7\example7.cpp(17) : error C2440: =: невозможно преобразовать 'const char [9]' в 'LPCWSTR'
        Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
c:\pr1\example7\example7.cpp(20) : error C2664: CreateWindowExW: невозможно преобразовать параметр 2 из 'const char [9]' в 'LPCWSTR'
        Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
Журнал построения был сохранен в "file://c:\pr1\example7\Debug\BuildLog.htm"
example7 - ошибок 2, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========



Понятно, что условия компиляции этого проекта VC 6 или VC 2002, но хотелось быть почитать как это преобразовывать в работающий вариант на VC 2008. Или хотя-бы как запустить именно этот листинг. 

Заранее благодарен...


Модератор: немного изменил вывод об ошибках, чтобы не выходило за границы экрана

Автор: Crafty 14.10.2010, 12:00
Проблема с юникодом.
Добавьте L вот так в строках где ошибки.
Код

w.lpszClassName = L"My Class";


Добавлено через 1 минуту и 53 секунды
Подробнее в этой http://forum.vingrad.ru/topic-62459.html посмотрите.

Автор: bsa 14.10.2010, 12:07
larionov0ilia, ты уверен, что тебе именно WinAPI нужен? Может стоит обратить внимание на что-нибудь более высокоуровневое (.NET (C#, в частности) или Qt/Gtk/wxWidgets)?

Автор: larionov0ilia 14.10.2010, 15:20
спасибо все заработало ...

to bsa
все эти технологии меняют друг друга очень часто 
апи меняется более медленно, тем более для того что научится системному программированию необходимо понять принципы, а не научится работать с обертками ....

Автор: djamshud 14.10.2010, 15:41
larionov0ilia, шепотом: рисование окошек - это не системное программирование. Реализуйте какой-нибудь сервер, потом заоптимизируйте его до высоконагруженного. Потом - до распределенного. Вот это можно будет назвать системным программированием. К тому же получите кучу экспириенса и левел-ап.

Автор: bsa 14.10.2010, 15:50
Цитата(larionov0ilia @  14.10.2010,  16:20 Найти цитируемый пост)
все эти технологии меняют друг друга очень часто

Что-то не припомню, чтобы они друг друга меняли. Qt, например, уже лет 10 наверное.

Цитата(larionov0ilia @  14.10.2010,  16:20 Найти цитируемый пост)
апи меняется более медленно
Конечно! Именно поэтому MS отказалась от поддержки старых программ в Windows 7 и реализовала их запуск через виртуальную машину.  smile Правда, есть такой API, который называется POSIX... Вот он мало менялся с 70-х годов прошлого века (на его основе построена стандартная библиотека Си)... Но мы же не про него, да?

Цитата(larionov0ilia @  14.10.2010,  16:20 Найти цитируемый пост)
тем более для того что научится системному программированию необходимо понять принципы, а не научится работать с обертками ....
В точку. Именно поэтому, тебе следует сначала научиться пользоваться языками программирования на простых вещах, а не лезть в дебри системного программирования (это тебе не окошки рисовать). Ты же еще очень многого не знаешь.

Добавлено через 30 секунд
Цитата(djamshud @  14.10.2010,  16:41 Найти цитируемый пост)
рисование окошек - это не системное программирование.
опередил  smile

Добавлено через 3 минуты и 6 секунд
Цитата(djamshud @  14.10.2010,  16:41 Найти цитируемый пост)
Реализуйте какой-нибудь сервер, потом заоптимизируйте его до высоконагруженного. Потом - до распределенного.
Кстати, есть у меня сомнения, что в этом случае WinAPI будет актуален... Обычно, для "высоконагруженных" и "распределенных" используют несколько другие ОС (кстати, более соответствующие POSIX)...

Автор: djamshud 14.10.2010, 16:03
bsa, если делать win-only распределенную реализацию, то и с winAPI можно будет вдоволь наиграться. Но я писал более абстрактно - с какого системного программирования можно получить пряники, а не конкретно на чем это делать.

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