Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с использованием старого кода в VC 2008, не могу скомпилировать пример winapi 
V
    Опции темы
larionov0ilia
Дата 14.10.2010, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



Решил изучать программирование на 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. Или хотя-бы как запустить именно этот листинг. 

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


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

Это сообщение отредактировал(а) bsa - 14.10.2010, 12:08
PM MAIL   Вверх
Crafty
Дата 14.10.2010, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



Проблема с юникодом.
Добавьте L вот так в строках где ошибки.
Код

w.lpszClassName = L"My Class";


Добавлено через 1 минуту и 53 секунды
Подробнее в этой теме посмотрите.
PM MAIL   Вверх
bsa
Дата 14.10.2010, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



larionov0ilia, ты уверен, что тебе именно WinAPI нужен? Может стоит обратить внимание на что-нибудь более высокоуровневое (.NET (C#, в частности) или Qt/Gtk/wxWidgets)?
PM   Вверх
larionov0ilia
Дата 14.10.2010, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



спасибо все заработало ...

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

PM MAIL   Вверх
djamshud
Дата 14.10.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



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


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
bsa
Дата 14.10.2010, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(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)...
PM   Вверх
djamshud
Дата 14.10.2010, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



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


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.5278 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.