Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: bomzzz
Дата сообщения: 15.02.2013 15:12
ну а мне надо знать что железка конкретно делает, а изучать придуманные микрософтом объекты не воодушевляет. ну не понимаю я так.
Автор: AZJIO
Дата сообщения: 15.02.2013 15:41
bomzzz
То есть ты хочешь написать свой IE, вместо того чтобы использовать готовый объект IE? Не хилый замах. При чём сам же мне предлагал 3 раза использовать вызовы WinAPI, что по сути и есть готовые объекты.
Посмотри пример использования объекста IE в своём GUI.
Автор: bomzzz
Дата сообщения: 15.02.2013 16:16
ну я сам когда программку писал, то использовал winsocks32 - ничего особо сложного, но потом подумал, что моя реализация HTTP протокола может быть не надежной и переделал все на wininet. но после очередного обновления IE горько пожалел
а первый вариант програмки работает нормально, только я уже забыл код, надо разбираться считай по новой. а я там накрутил с псевдологикой. никогда уже не разберусь
Автор: AZJIO
Дата сообщения: 15.02.2013 18:07
Как создать массив, который содержит текстовые данные? И как можно изменить содержимое этих данных?
Судя по описанию я нашёл только символьный массив. Посмотрев видео уроки rwiwnr461 понял что массив можно сделать на основе массива указателей, но опять же длина ячейки массива указана конкретно, например 15 символов. Я хочу поместить в ячейку 17 символов. Из описания я понял, что создать новую переменную с тем же именем не могу, присвоить больше указанного не могу, выходит мне надо удалить адрес переменной и создать новую получив её указатель и присвоить адрес указателя ячейке массива?
Автор: ne_viens
Дата сообщения: 16.02.2013 16:22
Пример на основе того-же кода поиска файлов:
[more]#ifndef UNICODE
#define UNICODE //так как ожидаем не английские названия файлов тоже, включаем unicode кодировку
#endif
#ifndef _UNICODE
#define _UNICODE
#endif
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>

#pragma optimize("s", on) //для удобства отладки на OllyDbg
#define NUM_MAX 500000 //max ожидаемое количество файлов, но предусмотрен механизм динамического увеличения max количества записей

typedef struct { //тут будем хранить указатели на названия файлов, текущее положение в массиве, объём массива
    int count;
    int max;
    short* entries;
} PACK;

void find_files(wchar_t* wrkdir, PACK** ptr) //рекурсивная ф-я поиска файлов
{
    int i;
    PACK *p, *newPack;
HANDLE hFile;
WIN32_FIND_DATA file_data;
wchar_t wrkdirtemp[MAX_PATH], buf[MAX_PATH], buf2[MAX_PATH];

if(!wrkdir || !wrkdir[0]) //проверка аргумента (рабочая директория) на пригодность к дальнейшей работе
return;

wcscpy(wrkdirtemp, wrkdir); //делаем копию для работы

if(wrkdirtemp[wcslen(wrkdirtemp)-1] != L'\\') //если нет, добавляем "\"
wcscat(wrkdirtemp, L"\\");

wsprintf(buf, L"%s*", wrkdirtemp); //добавляем "*", если надо что-то другое, можно передать через третий аргумент
hFile = FindFirstFile(buf, &file_data); //начинаем пойск
if(hFile == INVALID_HANDLE_VALUE)
return;
        
do //основная петля поиска
{
if(file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //если попали на директорию...
{
// if(wcscmp(file_data.cFileName, L".") && wcscmp(file_data.cFileName, L"..")) //..проверяем не текущая или родительская ли
if('.' == *(int*)&file_data.cFileName || (0x002e002e == *(int*)&file_data.cFileName && 0 == *(short*)((char*)file_data.cFileName + 4))) //то-же, только быстрее
continue; //если "." или "..", пропускаем

wsprintf(buf, L"%s%s", wrkdirtemp, file_data.cFileName); //иначе добавляем к рабочей копии директории
find_files(buf, ptr); //и уходим в нее рекурсивно
}
else //если на файл попали...
{
// if(!(file_data.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM))) //и он не скрытый и не системный
// wprintf(L"%s%s\n", wrkdirtemp, file_data.cFileName); //печатаем

            p = *ptr; //указатель на структуру

            if(p->count >= p->max)                                         //есть место ещё?
            {
                i = p->max * 2;                                             //нет, делаем размер 2 раза больше
                newPack = malloc(i * sizeof(void*) + sizeof(int) * 2); //выделяем память под новую структуру
                newPack->max = i; //переносим туда всё с старой переполненной
                newPack->count = p->count;
                memcpy(&newPack->entries, &p->entries, p->count * sizeof(void*));
                free(p); //и удаляем старую
                p = newPack; //правим указатели на новую структуру чтобы указывали
                *ptr = newPack;
            }

            i = wsprintf(buf2, L"%s%s\n", wrkdirtemp, file_data.cFileName); //формируем "path"+"filename", получаем его длину
            *(&p->entries + p->count) = malloc((i + 1) * 2); //выделяем для него память, указатель на которую сохраняем в текущее положение массива
            memcpy(*(&p->entries + p->count), buf2, (i + 1) * 2);            //и копируем в эту память "path"+"filename"
            ++p->count; //инкрементируем указатель на текущее положение в массиве
}
} while (FindNextFile(hFile, &file_data)); //и так далее, пока все файлы в текущей директории не найдены
FindClose(hFile);
}

main()
{
    int i;
    PACK* p;

    p = malloc(NUM_MAX * sizeof(void*) + sizeof(int) * 2); //выделяем память под структуру указателей названий файлов
    p->count = 0; //инициализируем указатель на текущее положение в массиве
    p->max = NUM_MAX; //и размер массива

    find_files(L"C:", &p); //заполняем структуру
find_files(L"Z:", &p);
//    sort_files(&p); //если надо, сортируем

    _setmode(_fileno(stdout), _O_U16TEXT); //подготавливаем печать в unicode, чтобы не английские названия тоже печатались
 
   for(i = 0; i < p->count; ++i)
    {
        wprintf(L"%s", *(&p->entries + i)); //печатаем из массива
        free(*(&p->entries + i)); //и освобождаем память элемента массива
    }

    free(p); //удаляем структуру
}[/more]
Файлы с путями сначала заносятся в массив, потом выводятся на консоль уже из массива.

Автор: bomzzz
Дата сообщения: 17.02.2013 11:12
никто случайно не знает зачем нужен файл stub512.com ? чета не могу найти ничего толкового написаного
Автор: ne_viens
Дата сообщения: 17.02.2013 11:28
Это первые байты каждой на MCC собранной программы.
При помощи ключа /STUB:mystub.bin линкру можно дать команду использовать другой stub.
Автор: bomzzz
Дата сообщения: 17.02.2013 11:35
немного просветления есть. а что то читануть простенькое и короткое по этому поводу можно?
Автор: ne_viens
Дата сообщения: 17.02.2013 11:38
http://msdn.microsoft.com/en-us/library/7z0585h5.aspx
Автор: bomzzz
Дата сообщения: 17.02.2013 11:50
сенки

Добавлено:
гыгы проста

Добавлено:
а как MSDIS[номер].dll использовать? чета ее похоже зря в масм ложат, они ни одной программе не нужна
Автор: ne_viens
Дата сообщения: 17.02.2013 13:47
link /dump /disasm some.exe >some.asm
Автор: bomzzz
Дата сообщения: 17.02.2013 15:24
сенки.
Автор: dimon0476
Дата сообщения: 17.02.2013 18:04
AZJIO, я тоже С хочу освоить. И пока не получается. Спасибо за ссылку на "Полный справочник по С". Я нашел его в pdf . Уже несколько раз задавал вопрос по поводу МС Визуал С++. Все таки, интересно знать и разных версиях и чем лучше пользоваться.
Автор: ne_viens
Дата сообщения: 17.02.2013 18:18
Для обучения вполне досточно Express'a.
Потом, если понадобится 64bit или ml.exe для ассемблера, можно и Standard или Pro установить.
http://msdn.microsoft.com/en-us/library/hs24szh9%28v=vs.80%29.aspx
Автор: dimon0476
Дата сообщения: 17.02.2013 18:27
Могу выложить некоторые учебники, если кто хочет:
С++ для чайников, С++ за 21 день...
Библия delphi.djvu
Основы программирования для чайников, 4-е издание.pdf
Дэвис C. C++ для чайников (5-е издание, 2007).pdf
Ну и постом выше - "Полный справочник по С". Он мне, кстати, больше всех понравился.

ne_viens, спасибо за ответ. А такая же ссылка, только по-русски есть? И Express у меня есть ДВД версия и какая-то по-меньше, около 800 МВ. Какую ставить лучше? Та, что меньше, может работает с библиотеками на сайте МС или нет?

Добавлено:
Один человек рекомендовал изучать программирование в такой последовательности:

1. Pascal + освоение алгоритмической базы и структур данных (примерно 3 месяца - полгода интенсивного изучения)

За это время необходимо освоить базовые знания по алгоритмам и
структурам данных

1. циклы (пост и пред)
2. условия
3. switch
4. ввод / вывод / файлы
5. арифметические операции
6, массивы
7. матрицы
8. деревья разные
9. списки разные
10. алгоритмы работы с этими данными, хранение, обработка, сортировка и т.д.

11. Базовые понятия по компиляции и сборке, и т.д.

подойдет любой университетский учебник по алгоритмам и структурам данных

а лучше лекции найди ВМиК мгу в открытом доступе наверняка есть

2. Далее ASM 32bit (ассемблер, лучше 32-х битный, т.к. 16-битный уже немного неактуален, а те ограничения, что в нём используются, могут привести в дальнейшем к замешательству.) (срок 3 - 6 месяцев интенсивного изучения)

Цель познакомиться с низкоуровневым программированием, получить потяние о том как программа взаимодействует с оборудование, знания об архитектуре ЭВМ.

Считаю что данный шаг ни в коем случае пропускать нельзя, т.к. любое более менее качественное программирование на любом из языков программирования выского уровня подразумевает отладку и оптимизацию, а без знаний asm и архитектуры современных эвм, этого сделать просто невозможно.

Подойдет любой практический учебник по ASM
Книги по архитектуре современным ЭВМ
История развития архитектуры ЭВМ (возможно понадобится для более доступного понимания книг по современным архитектурам)

3. Язык С (язык СИ именно СИ, а не СИ ПЛЮС ПЛЮС) (3 - 6 месяцев)

Именно этот язык, потому что большинство современных языков имеют СИ подобный синтаксис, вот небольшой пример их:

C / C++ / C# / PHP 4 / PHP 5.x / JavaScript и другие.

Освоив язык СИ и его синтаксис вы достаточно быстро сможете ориентироваться в коде написанном на любом из языков, имеющим СИ подобный синтаксис. Это поможет вам находить и достаточно быстро разбирать примеры уже готовых решений.

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

Книга Керниган Ричи язык СИ
Любой практический задачник

Изучение лучше осуществлять под ОС семейства Unix

Попутно освоив следующие инструменты bash / make / gcc / gdb / командная строка ос cемейства Unix

4. Язык С++ (СИ ПЛЮС ПЛЮС) (3 - 6 месяцев)

Основная цель понятия принципы объектно ориентированного программирования и закрепить их на практики.

С++, а не любой другой язык ООП, потому что с к нему наиболее просто перейти от языка С.

Книга Страунструп С++
Учите язык по стандарту, а не с использованием каких-то частных реализаций

После года- двух лет интенсивного обучения по этой программе вы сможете овладетель практически без труда любым языком ООП.

Дальше вас ждёт многолетняя практика, так как только практика дает опыт, 80% всех задач, которые вам будут встречаться однотипны, и при многолетнем опыте у вас практически на все будут готовые почти готовые решения.

Если кто собирается работать в крупных компания и заниматься разработкой не помеашет еще овладеть следующими технологиями:

Системы контроля версий:
subversion / git / cvs

Языком моделирования :
uml

Патерны проектирования, хотя бы основные, умение применять их на практики.

Принципы SOLID:
http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29

Овладев этими знаниями вы сможете уже притендовать на ведущие позиции в крупных российских и международных компаниях по разработке программного обеспечения.

Всем желаю удачи! Все изложенное выше, является моим личным мнением и может отличаться от вашего, однако было проверено на практике.
Автор: utmost80
Дата сообщения: 17.02.2013 23:28
dimon0476
Цитата:
Один человек рекомендовал изучать программирование в такой последовательности:
 1. Pascal + освоение алгоритмической базы и структур данных (примерно 3 месяца - полгода интенсивного изучения)

Я бы вам не рекомендовал с паскаля начинать.
бейсикоподобный синтаксис мало общего с сями имеет,
начинайте прямо с Си - он не сложный, ну или возьмите хотя-бы C#.

Автор: bomzzz
Дата сообщения: 18.02.2013 00:16
паскаль с бейсиком ничего общего не имеет. правда современный бейсик тоже ничег общего с бейсиком не имеет
Автор: utmost80
Дата сообщения: 18.02.2013 06:21
bomzzzа вы на синтаксис посмотрите, паскаль хоть и уникальный, но всё-же больше напоминает бейсик чем Си.
в вики так-же сказано:
In the early 1980s, UCSD Pascal was ported to the Apple II and Apple III computers to provide a structured alternative to the BASIC interpreters that came with the machines.
Many PC hobbyists in search of a structured replacement for BASIC used this product.
Человек изучавший бейсик быстрее привыкнет к паскалевскому синтаксису нежели к сишному.
Не стоит изучать паскаль чтобы изучать Си - они очень не похожи.

впрочем это лишь моё мнение.
Автор: bomzzz
Дата сообщения: 18.02.2013 07:23
борладвский бейсик и его фирменные аналоги под большие машины (когда не было персоналок а были терминалы) это и есть бейсик. потом его купил микрософт, ввел в него элементы паскаля - ну это как раз неплохо получилось, логика осталась прежняя, а из паскаля подрезали все удобное. а потом... потом микрософт бейсик похоронил, а с ним и ассемблер.
мне на новом бейсике программы попадались я там вообще ничего не понимаю - ничего общего нет, одно название осталось

вот на турбо писал не так давно по старой памяти
[more]data "ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї"
data "і і"
data "і Download Master Doctor - VERSION 1.0 і"
data "і ќв Їа®Ја ¬¬ г¤ «пҐв б«г¦ҐЎ-го Ё-д®а¬ жЁЁ Download Master- Ё -г«ҐўлҐ і"
data "і Ў ©вл г бЎ®©-ле, -Ґ¤®Є зҐ-ле д ©«®ў, бЄ з --ле ў ®¤Ё- Ї®в®Є. і"
data "і „Ґ©бвўЁҐ -Ґ ¬®¦Ґв Ўлвм ®в¬Ґ-Ґ-®. •®а®иҐ-мЄ® Ї®¤г¬ ©вҐ Ї®-Ё¬ ҐвҐ «Ё ‚л в®, і"
data "і зв® ¤Ґ« ҐвҐ. Џа®Ја ¬¬ а бЇа®бва -пҐвбп 'зв® Ѓ®Ј Ї®б« «', д ©«л ®Ў¬Ґ-г Ё і"
data "і ў®§ўа вг -Ґ Ї®¤«Ґ¦ в, -ЁЄ ЄЁе ЇаҐвҐ-§Ё© Ѓ®¬¦Ё -Ґ ЇаЁ-Ё¬ ов. і"
data "і Џа®Є®-бг«мвЁаг©вҐбм ЇаҐ¤ў аЁвҐ«м-® Ќ д®а㬥 Download Master- і"
data "і - -г¦-® «Ё ‚ ¬ в®, зв® ўл ¤Ґ« ҐвҐ. і"
data "і http://downloadmaster.ru/forum/index.php і"
data "і ЏҐаҐЁ¬Ґ-г©вҐ 楫Ґў®© д ©« ў BOMZ.DMF Ё Ї®¬ҐбвЁвҐ ҐЈ® ў ®¤-г ¤ЁаҐЄв®аЁо і"
data "і б Download Master Doctor-®¬. “бЇҐе®ў!!! і"
data "і і"
data "і і"
data "і і"
data "і і"
data "і і"
data "АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ"
data "ЌЂ†Њ€’… ‹ћЃ“ћ Љ‹Ђ‚€&#152;“"
data " "
screen 0, 1
color 15, 1
key off
cls
l%=0
1 read scr$
print scr$;
l%=l%+1
on l%-18 goto 2
goto 1
2 read scr1$
read scr2$
color 14, 1
3 locate 18, 29
print scr1$
delay 0.35
locate 18, 29
print scr2$
delay 0.35
on len(inkey$)+1 goto 3
locate 18, 29
print scr$
OPEN "B", #1, "BOMZ.DMF"
L&=LOF(1)
LOCATE 20, 1
PRINT " ђ §¬Ґа ў 襣® д ©« "; L&; "Ў ©в"
INPUT; " …б«Ё ўл ҐйҐ е®вЁвҐ г¤ «Ёвм б«г¦ҐЎ-го Ё-д®а¬ жЁо - ¦¬ЁвҐ Enter", A
I&=L&-1000
I&=I&*SGN(SGN(I&)+1)
SEEK #1, I&
X$=""
PUT$ #1, X$
CLOSE #1
BEEP

OPEN "B", #1, "BOMZ.DMF"
I&=LOF(1)
U$=STRING$(16000, 0)
10 Y$=""
I&=I&-16000
I&=I&*SGN(SGN(I&)+1)
SEEK #1, I&
GET$ #1, 16000, Y$
IF Y$=U$ AND I&<>0 THEN 10
CLOSE #1

L&=LEN(Y$)
R&=L&
100 R&=INT((R&+1)/2)
IF RIGHT$(LEFT$(Y$, L&), R&) = STRING$(R&, 0) THEN L&=L&-R&
IF R&=1 OR R&=0 THEN 200
GOTO 100
200 PRINT " ЏҐаўл© -Ґ-г«Ґў®© Ў ©в а бЇ®«®¦Ґ- - Ї®§ЁжЁЁ"; I&+L&
INPUT; " ¤«п г¤ «Ґ-Ёп -г«Ґўле Ў ©в®ў - ¦¬ЁвҐ Enter", A

OPEN "B", #1, "BOMZ.DMF"
SEEK #1, I&+L&
PUT$ #1, X$
CLOSE #1
BEEP[/more]

Добавлено:
подскажите пожалуйста такую вещь. может я неправильно говорю только:
вот есть библиотеки в которых только таблица импорта(?) а есть статические (?) в которых еще сам код содержится и если делать программу с ней, то сама дллка программе будет не нужна, весь нужный код встроится в программу (правда она получится тяжелее) кому какие команды надо дать чтоб используя статическую библиотеку все же получить программу которая код не загружает?
Автор: ne_viens
Дата сообщения: 18.02.2013 08:55
Это зависит только от того, с какой lib линкуешь.
Если с той, в которой публичные символы ("таблица импорта"), то ехе будет загружать внешнюю dll, если с той в которой полноценный код- код будет статически слинкован в exe.
Автор: bomzzz
Дата сообщения: 18.02.2013 09:51
понятненька. спасипки. как статическую библиотеку делать сам вспомнил она из OBJ файла делается

Цитата:
@echo off
color 9F
cd %~dp1
\masm32\bin\ml.exe /c /coff "%~1"
\masm32\bin\lib /out:%~n1.lib "%~n1.obj"
pause


или так

Цитата:
@echo off
color 0a
cd %~dp1
\masm32\bin\ml.exe /c /coff "%~1"
\masm32\bin\link.exe -lib "%~n1.obj" /out:%~n1.lib
del "%~n1.obj"
pause
Автор: kotlomoy
Дата сообщения: 18.02.2013 18:57
utmost80

Цитата:
bomzzzа вы на синтаксис посмотрите, паскаль хоть и уникальный, но всё-же больше напоминает бейсик чем Си.

О каком же это вы бейсике говорите? Оригинальный бейсик ничего общего с паскалем не имеет. Это вообще неструктурный язык программирования, а паскаль структурный, как можно вообще сравнивать?
Сам начинал с бейсика, потом перешел на паскаль. Совершенно разные языки. Указатели еще в паскале начал изучать, так что на Си без проблем перешел. Заменил begin...end на фигурные скобки, да ключевые слова чуть-чуть по-другому расставил. А по сути то же самое.
Автор: bomzzz
Дата сообщения: 18.02.2013 19:02
о классическом
Был разработан в 1963 году профессорами Дартмутского колледжа Томасом Курцем и Джоном Кемени.
да по сути все одно и тоже - ассемблер
Автор: bomzzz
Дата сообщения: 19.02.2013 03:04
у кого 2008 студия стоит, посмотрите можелуйста версию файла C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\ml.exe. после обновления у меня так и осталась 9.0.21022.8.
Автор: akaGM
Дата сообщения: 19.02.2013 10:19

Цитата:
Microsoft (R) Macro Assembler Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
Автор: bomzzz
Дата сообщения: 19.02.2013 10:27
блин. у меня при установке получилась ошибка, видимо из за того, что я перед этим DDK поставил. и обновки скачались а не обновилось.
я такую версию как раз из ддка вытащил но там не все файлы есть

Добавлено:
гавняшка такая. опять ошибка при установке. вообщем ей надо vcredist сначала поставить, а потом она свои фреймворки тащит. 2005 2010 студии сами нормально встали. обновится или нет сейчас посмотрим
Автор: bomzzz
Дата сообщения: 19.02.2013 13:44
akaGM
дай пожалуста этих новых файлов, а то у меня опять не обновилось. не могу понять почему.
C:\Program Files\Microsoft Visual Studio 9.0\VC\bin
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE

и если после обновления найдутся rc.exe rc.dll а то у меня их вообще нет

Добавлено:
а как вы решаете какая вам студия нужна?
Автор: akaGM
Дата сообщения: 19.02.2013 15:06
bomzzz

только у меня 2008 Express, не смущает?

http://rghost.net/43915407
816KB
Автор: bomzzz
Дата сообщения: 19.02.2013 15:22
даже не знаю. но уменя часть файликов есть сейчас сверю размеры

Добавлено:
то что у меня есть более модной версии 9.00.30729.208 не с чем сравнивать. да наверняка одно и тоже.
Автор: akaGM
Дата сообщения: 19.02.2013 16:24

Цитата:
а как вы решаете какая вам студия нужна?

это мне что ли?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.