Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Массив - как организовать? (без array и на АПИ)


Страницы:   1 2 3 4

Б. Гейтс ©   (2007-10-24 21:43:00) 

Всем привет!
Как организовать массив с помощью функций GlobalAlloc и т.п.?
Нужно, шоб в одном элементе можна было деРЖАТЬ до 256 байтов.
Работаю на чистом апи, даже array не использую!
Если честно, то даже не на паскале и не на Си.
Помогите, кто чем может!
Есть идея:
1) использовать массив DWORD'ов (кол-во пунктов - 256)
2) после использования функций Global*** хранить в пунктах адреса элементов в массиве DWORD'ов
3) в какой-нить переменной хранить кол-во элементов

Ну о-о-о-о-о-очень нужна!
Буду рад любому ответу!


Ins   (2007-10-29 12:45:00) [1]


> Юрий Зотов ©   (29.10.07 00:10) [63]

Браво! Однажды сам наблюдал, как далеко не трезвый мужчина в купе поезда научил 3-летнего ребенка читать, несмотря на всяческие попытки мамы ребенка сопротивляться, но это, пожалуй, даже круче. Не каждому преподавателю дано... Детям очень повезло.


Галинка   (2007-10-29 11:58:00) [2]

Юрий Зотов ©   (29.10.07 00:10) [63]

хороший Вы учитель. У нас тоже такой был в школе. При нем мы и ассемблер учили. Но теперь уже все забыла наверное...


Virgo_Style   (2007-10-29 07:52:00) [3]

Юрий Зотов ©   (29.10.07 0:10) [63]

Ну, тут и от учителя немало зависит, чтобы не сказать - почти все :-P


Юрий Зотов   (2007-10-29 00:10:00) [4]

> Галинка ©   (28.10.07 22:31) [59]

Еще один реальный факт, с Вашего позволения. Когда моя дочь училась в третьем классе, собрали нас, родителей, и сказали - а давайте вести для ребят кружки, кто что умеет.

И выпало мне волею судеб вести кружок программирования. При условии, что ни одного компьютера в школе нет вообще. А программировать на бумаге... да ведь это же третий класс, они ж со скуки помрут моментально.

Что делать? Родилась идея - программируемые микрокалькуляторы. Они тогда были уже распространены, вот ребята и притащили, у кого в семье был. Десяток набралось, а больше и не надо - один на пару-тройку человек, вот их все ОК.

И стали мы учиться на этих машинках программировать. А там, понятное дело, сплошные коды да адреса, и ничего более. Как хочешь - так и объясняй. Третьеклассникам!

И что Вы думаете? Я обалдел - они все понимали!!! Они писали программы, они въехали в мнемонику и в коды команд, в регистры, в instruction pointer, в адреса и переходы, в прямую и косвенную адресацию... ТРЕТИЙ КЛАСС!!! Я ШИЗЕЛ!!!

Нет, я и правда шизел, когда клоп ростом со стол объяснял мне свою программу почти буквально в таких словах: "Здесь я сохраняю регистр X в ячейке памяти с адресом 4, потому что сейчас начнется ввод и регистр X будет затерт, а в нем находится адрес перехода, который понадобится на шаге 25 и поэтому его надо сохранить".

И ведь все правильно говорил, вот в чем главный фокус-то. Хотя, чего б ему и ошибаться, если эту программу он же сам и написал?

О как! А то - массивы...
:о)


Zeqfreed   (2007-10-28 23:51:00) [5]

> vpbar ©   (28.10.07 23:47) [61]

> Если вы про указатели, то не нужны.

> В тех языках где нет массива... ...есть
> указатели его можно эмулировать

Логика шикарная :)


vpbar   (2007-10-28 23:47:00) [6]

>>Галинка ©   (28.10.07 22:31) [59]
>>а для передачи массивов в качестве параметра функции?
Если вы про указатели, то не нужны. Для понимания механизма, может быть. Но для понимания логики программы - совсем лишнее.
Это забота компилятора передать параметр наиболее оптимальным способом.
В тех языках где нет массива - (в lisp-е чтоли) - а есть указатели его можно эмулировать. Собственно я уже повторяюсь.
>>Крыша от этого изобилия поедет
А вы по полочкам раскладывайте.


Zeqfreed (thief)   (2007-10-28 23:40:00) [7]

> Галинка ©   (28.10.07 22:31) [59]

От красно-черных деревьев, наверное, вообще мутнеет в глазах и шарики за ролики закатываются? :)


Галинка   (2007-10-28 22:31:00) [8]

Юрий Зотов ©   (28.10.07 06:55) [58]

я бы наверное так тоже хотела. Тот же человек порекомендовал почаще смотреть в ассемблерный код отладчика. Но пока для меня там китайская грамота. Хотя Эклипс и выдает его весьма охотно. Будем грызть... )))

vpbar ©   (26.10.07 22:31) [56]

а для передачи массивов в качестве параметра функции? В тех языках, где нет класса array? Мне кажется именно поэтому то и дело возникают непонятки с указателями/ссылками/новыми типами указателей (в Си++, например). А еще есть понятие индексированный список... Крыша от этого изобилия поедет ((


Юрий Зотов   (2007-10-28 06:55:00) [9]

> Galinka ©   (26.10.07 21:43) [55]

Странный аргумент... человек высказал свое мнение, и только. Другой, не менее авторитетный человек с таким же успехом скажет обратное - и что? Это тоже аргумент?

Значицца, так... с учетом известной нам аудитории могу привести следующий факт (заметьте - не мнение там чье-то, а реальный факт, с коим не поспоришь).

Понятно, что к этой самой аудитории все мы когда-то принадлежали, и я в том числе. Так вот - эту самую нашу аудиторию, состоящую примерно из 20 человек тогдашних девятиклассников, обычных учеников обычной школы, учили программировать... напрямую в машинных кодах (!!!). А самое интересное, что не только учили, но и реально научили. И не избранных, а всех. И все прекрасно поняли, что такое команды, данные, адресация и все прочее.

Значит - можно? Значит, можно. И не слишком? И не слишком.

А Вы говорите - массивы...
:о)


Б. Гейтс   (2007-10-27 08:45:00) [10]


> Массив достаточно абстрактная весчь. Вот для реализации
> (иммитации) массивов на тех языках где его нет, приходится
> пользоваться указателями.

Поэтому я попросил помощи у вас.
Всем огромное спасибо! Все реально помогли!

Что это за возвращаемое значение у функции GlobalAlloc? Т. е. хэндл чего? Я раньше думал, что хэндл бывает лишь у окон.
GlobalLock - возвращает указатель памяти, кот. я зарезервировал с помощью GlobalAlloc.
GlobalReAlloc - изменяет размер памяти. После этой функции следует ли еще раз вызывать GlobalLock?

Если я чего-то недопонимаю, объясните плиз..


vpbar   (2007-10-26 22:31:00) [11]

>>Galinka ©   (26.10.07 21:43) [55]
ИМХО человек прав. Для понимания как использовать хеши тоже нужно знать адресацию и указатели? Нет, по- моему не нужно.
Массив достаточно абстрактная весчь. Вот для реализации (иммитации) массивов на тех языках где его нет, приходится пользоваться указателями.


Galinka   (2007-10-26 21:43:00) [12]

Юрий Зотов ©   (26.10.07 11:16) [38]

если человек в школе массивы проходил, то там редко говорят, как оно все устроено (( Просто говорят, что есть такая структура. Кроме того, не далее как сегодня, говорила с одним товарищем, который достаточно глубоко знает Си. Выполняет на нем достаточно нетривиальные проекты. Но когда я сказала. что понимание массивов невозможно без понимания указателей и адресации, он сказал, что это слишком сложно типа для первого понимания массивов. (Конечно с учетом известной нам аудитории).


Б. Гейтс   (2007-10-26 16:15:00) [13]


> "программировании на API" это требуется :)

Кхе-кхе... я только спросил.


Ins   (2007-10-26 16:07:00) [14]


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

Неправильно понял фразу, сорри. Но все равно, лучше знать что такое страница памяти, иногда даже в "программировании на API" это требуется :)


Ins   (2007-10-26 16:00:00) [15]


> Апи бывает не только вин....В линухе тоже есть Апи....Для
> опенГЛ и СаундБластера тоже есть апи....

Можно еще про разные подсистемы (POSIX, OS/2) на базе Windows вспомнить, про NativeAPI - это тоже API, только не Win32. Да и вообще, API очень широкое понятие.


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

Ошибаетесь. Разбиение памяти на страницы поддержывается аппаратно процессором.

В общем, товарищу Гейтсу рекомендуется почитать книжки и найти ответы на свои вопросы.


barmaglo   (2007-10-26 15:50:00) [16]

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


Ega23   (2007-10-26 15:49:00) [17]


> Только не совсем понял отличие Win32API от API.


ANSI SQL - стандартизованное API для доступа к данным в СУБД


@!!ex   (2007-10-26 15:36:00) [18]

> Только не совсем понял отличие Win32API от API.

Я пиуш на OPenGL API. Которое не имет НИКАКОГО отношения к WinAPI и Windows в частности. ОДнакто тоже явялется API.


Б. Гейтс   (2007-10-26 15:21:00) [19]

Всем огромное спасибо!
Теперь я с массивами на "вы"


> @!!ex ©   (26.10.07 13:02) [43]

Спасибо за пример, проверю попозже, щас времени нет.

> Кодером - да, программистом - пока не вижу.

Стоит лимне идти в программеры? У всех ведь ошибки бывают.

> Например ножки микросхемы - типичный пример интерфейса.

Все отлично понял! (это я так думаю)

Только не совсем понял отличие Win32API от API.
И динамическую память не понял.
Ааа!! Забыл! Я же еще не знаю, что такое страница памяти! (если это в тему)

Итог:многого не знаю.


Маша Шрайбер   (2007-10-26 14:36:00) [20]

>> Б. Гейтс   (26.10.07 12:47) [41]
>> Но шансов стать кодером у меня больше, не так ли?

Только шкодером. Но им вы уже стали.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо