Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
1

Первый мой вопрос по win Api

12.05.2011, 16:33. Показов 1765. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Начал изучать win Api по книге Финогенова(win 32.основы програмирования)
первое что мне попалось это код без всяких разъяснений (с++ в консоли я знаю нормально)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*Програмна 2-1.   Простейшая программа с окном сообщением*/
#include <windows.h>//(1) Директива препроцессора
/*Главная функция WinMain*/
int WINAPI WinMain(HINSTANCE,HINSTANCE, LPSTR, int  )
{ //(21 Заголовок функции
    int m[10];//(3)  Объявление массива из 10 целых чисел
    char szText[100];//(4)  Объявление символьного массива
    for(int i=0;i<=9;i++)//{5) Цикл из 10 шагов
        m[i]=i*i;//(61   Гело цикла - занесение в массив квадратов чисел
    wsprintf(szText,//(7) Переменная, в которой формируется выводимая строка
            "Первый элемент: %d   Последний элемент: %d",//(8) Форматы преобразования
            m[0],m[9]);//{9)   Перечень выводимых переменных
    MessageBox(NULL,szText,"Info",МВ_0К);//(10)  Вывод окна сообщения
    return 0;//(11>  Возврат из главной функции в Windows
}//(12)   Скобка,  завершающая текст главной функции
но компелятор выдает следушие ошибки(вижул студия 08)
Код
1>c:\documents and settings\лежик.адм\мои документы\visual studio 2008\projects\project1\win 32 4\win 32 4\kod.cpp(15) : error C2664: wsprintfW: невозможно преобразовать параметр 1 из 'char [100]' в 'LPWSTR'
1>        Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c:\documents and settings\лежик.адм\мои документы\visual studio 2008\projects\project1\win 32 4\win 32 4\kod.cpp(16) : error C2065: МВ_0К: необъявленный идентификатор

и еще хотел спросить:
такие глупые вопросы лучше писать в эту тему или сюда
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2011, 16:33
Ответы с готовыми решениями:

Имеется две ос: XP и Win 7. Как в каждой из них удалить из "Мой компьютер" показ диска с неактивной win ?
Имеется две операционки XP и Seven. Хочу в каждой из них удалить из &quot;Мой компьютер&quot; показ диска с...

мой первый ноут
3 дня назад я купила ноут.и у меня уже 1000000 вопросов

Мой первый сайт :)
Раздел юмор я здесь не нашел, поэтому вопрос в топик. У кого какой сайт был первым? :) Я вот тут...

Первый мой ЛУТ
я сегодня первый раз подготовил плату ЛУТом, с первого раза :)) спасибо Ди за видео. Опустил в...

14
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
12.05.2011, 16:38 2
первая ошибка так решается
wsprintf(szText,//(7) Переменная, в которой формируется выводимая строка
L"Первый элемент: %d Последний элемент: %d",//(8) Форматы преобразования
m[0],m[9]);
а вторая не знаю почему,вроде всё правильно
0
72 / 71 / 8
Регистрация: 04.08.2010
Сообщений: 434
12.05.2011, 16:39 3
2-я нужно писать MB_OK, а не MB_нульK ^)
1
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
12.05.2011, 16:44  [ТС] 4
LineStown, спасибо помогло


Цитата Сообщение от Danvern Посмотреть сообщение
первая ошибка так решается
wsprintf(szText,//(7) Переменная, в которой формируется выводимая строка
L"Первый элемент: %d Последний элемент: %d",//(8) Форматы преобразования
m[0],m[9]);
не вижу в чем разница)

кстати,топерь ошибки изменились
Код
1>c:\documents and settings\лежик.адм\мои документы\visual studio 2008\projects\project1\win 32 4\win 32 4\kod.cpp(15) : error C2664: wsprintfW: невозможно преобразовать параметр 1 из 'char [100]' в 'LPWSTR'
1>        Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c:\documents and settings\лежик.адм\мои документы\visual studio 2008\projects\project1\win 32 4\win 32 4\kod.cpp(16) : error C2664: MessageBoxW: невозможно преобразовать параметр 2 из 'char [100]' в 'LPCWSTR'
1>        Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>
0
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
12.05.2011, 16:50 5
В свойствах проэкта, найди "набор символов" - использовать многобайтовую кодировку.
0
72 / 71 / 8
Регистрация: 04.08.2010
Сообщений: 434
12.05.2011, 16:52 6
попробуй так что ли

C++
1
2
3
4
wsprintf(reinterpret_cast<LPWSTR>( szText ),//(7) Переменная, в которой формируется выводимая строка
                        "Первый элемент: %d   Последний элемент: %d",//(8) Форматы преобразования
                        m[0],m[9]);//{9)   Перечень выводимых переменных
        MessageBox(NULL,reinterpret_cast<LPWSTR>( szText ),"Info",МВ_OК);//(10)  Вывод окна сообщения
Добавлено через 39 секунд
исходя из ошибки
1
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
12.05.2011, 17:52  [ТС] 7
LineStown, помогло
но чем это может быть вызвано?
мне теперь все исходные коды, что будут в этой книге так переделовать?

Добавлено через 21 минуту
и еще вопрос
reinterpret_cast<LPWSTR>() не может изменять string объекты?
и как тогда быть(надо string преобразовать в char?)
Код
 error C2440: reinterpret_cast: невозможно преобразовать 'std::string' в 'LPWSTR'
0
32 / 32 / 6
Регистрация: 24.02.2011
Сообщений: 126
12.05.2011, 18:05 8
Цитата Сообщение от LineStown Посмотреть сообщение
reinterpret_cast<LPWSTR>( szText )
так писать нельзя, 2 однобайтных символа превращаются в один, широкий символ

Добавлено через 2 минуты
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
'std::string'
зачем тебе это? пользуйся встроенным TCHAR

Добавлено через 2 минуты
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
такие глупые вопросы лучше писать в эту тему или сюда
пиши сюда https://www.cyberforum.ru/win-api/
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
12.05.2011, 18:24  [ТС] 9
Цитата Сообщение от eXXXXXXXXXXX Посмотреть сообщение
зачем тебе это? пользуйся встроенным TCHAR
можно по подробней как этим пользоваться
(как хедер, как присвоить сстроку)
0
32 / 32 / 6
Регистрация: 24.02.2011
Сообщений: 126
12.05.2011, 18:33 10
TCHAR - это wchar_t, если проект с поддержкой Unicode, иначе это обычный char
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
как этим пользоваться
как обычным встроенным типом,
TEXT("AAAA");
L"AAAA";
Это преобразования к Unicode строкам
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
12.05.2011, 18:38  [ТС] 11
можно писать такой код
C++
1
TCHAR ab=L"aaaa";
0
32 / 32 / 6
Регистрация: 24.02.2011
Сообщений: 126
12.05.2011, 20:02 12
C++
1
2
    
TCHAR *ab=L"aaaa";
или
C++
1
2
    
TCHAR ab[10]=L"aaaa";
0
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
13.05.2011, 03:48 13
Должно работать как с включенным в свойствах проекта UNICODE, так и без него. Все ошибки вылазили только из-за него.

C++
1
2
3
4
5
6
7
8
9
10
11
/* Програмна 2-1. Простейшая программа с окном сообщением */
#include <windows.h>
 
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
        int m[10];
        TCHAR szText[100];
        for(int i=0;i<=9;i++) m[i]=i*i;
        wsprintf(szText, _T( "Первый элемент: %d   Последний элемент: %d", m[0], m[9]);
        MessageBox(NULL, szText, _T("Info"), МВ_OК);
        return 0;
}
0
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
13.05.2011, 08:44 14
Не GrayWolf, это не серьезно...

Должно, но не будет, пока:
C++
1
2
3
4
5
6
7
8
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
        int m[10];
        TCHAR szText[100];
        for(int i=0;i<=9;i++) m[i]=i*i;
        wsprintf(szText, _T( "Первый элемент: %d   Последний элемент: %d"/*не*/)/*появится*/, m[0], m[9]);
        MessageBox(NULL, szText, _T("Info"), MB_OK);// и не исчезнет эта долбаная кириллица с МВ_OК
        return 0;
}
Чем бы мы еще занимались?
1
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
13.05.2011, 11:24 15
Digit@ll,
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
но компелятор выдает следушие ошибки(вижул студия 08)
1>c:\documents and settings\лежик.адм\мои документы\visual studio 2008\projects\project1\win 32 4\win 32 4\kod.cpp(15) : error C2664: wsprintfW: невозможно преобразовать параметр 1 из 'char [100]' в 'LPWSTR'
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c:\documents and settings\лежик.адм\мои документы\visual studio 2008\projects\project1\win 32 4\win 32 4\kod.cpp(16) : error C2065: МВ_0К: необъявленный идентификатор
Первая ошибка указывает на то, что в свойствах проекта включен UNICODE, а в функции - обычные, не UNICODE, символы; вторая - потому что вместо символа "O" был использован "0", который легко можно отличить от первого наличием косой черты в центре. Скобку да, согласен, пропустил. И могу списать только на полученное вчера сотрясение
1
13.05.2011, 11:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2011, 11:24
Помогаю со студенческими работами здесь

Мой первый шаг
«Строки» Дана фраза, в которой слова разделены одним пробелом, а сама фраза заканчивается...

Мой первый сайт
Доброе время суток аксакалам веб-паутины :) Пришло время когда мне понадобилось выходить на...

Мой первый треугольник
Делаю для андроид package com.example.opengl; import java.nio.ByteBuffer; import...

мой первый сайт
здравствуйте решил побаловаться и написать сайт вот что пока есть &lt;!doctype html&gt; &lt;html&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru