![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Массив - как организовать? (без array и на АПИ)
Б. Гейтс © (2007-10-24 21:43:00)Всем привет!
Как организовать массив с помощью функций GlobalAlloc и т.п.?
Нужно, шоб в одном элементе можна было деРЖАТЬ до 256 байтов.
Работаю на чистом апи, даже array не использую!
Если честно, то даже не на паскале и не на Си.
Помогите, кто чем может!
Есть идея:
1) использовать массив DWORD'ов (кол-во пунктов - 256)
2) после использования функций Global*** хранить в пунктах адреса элементов в массиве DWORD'ов
3) в какой-нить переменной хранить кол-во элементов
Ну о-о-о-о-о-очень нужна!
Буду рад любому ответу!
Ins (2007-10-26 13:08:00) [21]
> Еще вопрос: что такое апи вообще?
Сначала нужно понять что такое интерфейс. Интерфейс - это некая абстрактная прослойка, протокол, согласующий взаимодействие с объектом, то, что торчит наружу и позволяет управлять тем, что внутри. Например ножки микросхемы - типичный пример интерфейса. Сама логика находится внутри черного ящика, но нам предоставлен некий рычажок, дергая который можно изменять то, что находится внутри, при этом внутрь не залазить. API - это тоже интерфейс. Прослойка между пользовательским приложением и операционной системой, позволяющий из пользовательских программ производить манипуляции над системой. Win32API - подмножество API, представляет собой экспортируемые из библиотек функции, но только не нужно думать, что эти функции выполняют непосредственно требуемые действия над ОС. Это не так. Это именно интерфейсные функции, та самая прослойка, доступная из пользовательского приложения и передающая запрос на более низкий уровень, внутрь того самого черного ящика.
@!!ex (2007-10-26 13:07:00) [22]З.Ы.
забыл инхеритед в дестрое.
@!!ex (2007-10-26 13:02:00) [23]
type
TArray = class
public
Constructor Create(OneItemSize:integer);
Destructor Destroy; override;
Procedure SetLength(NewLength:integer);
Function GetLength:integer;
Function GetItem(Index:integer):Pointer;
protected
FirstItem:Pointer;
Count:integer;
ItemSize:integer;
end;
Constructor TArray.Create(OneItemSize:integer);
begin
ItemSize:=OneItemSize;
end;
Destructor TArray.Destroy; override;
begin
FreeMem(FirstItem);
end;
Procedure TArray.SetLength(NewLength:integer);
begin
Count:=NewLength;
ReallocMem(FirstItem,Count*ItemSize);
end;
Function TArray.GetLength:integer;
begin
Result:=Count;
end;
Function TArray.GetItem(Index:integer):Pointer;
begin
Result:=Pointer(Integer(FirstItem)+(Index*ItemSize));
end;
Что-то типа такого. Сорри, если ошибок наделал, придумывал и писал прямо здесь.
Ega23 (2007-10-26 13:02:00) [24]
> Но шансов стать кодером у меня больше, не так ли?
Кодером - да, программистом - пока не вижу.
Сергей М. (2007-10-26 12:53:00) [25]
> что такое апи вообще?
http://www.google.ru/search?complete=1&hl=ru&newwindow=1&client=firefox-a&rls=org.mozilla:ru:official&hs=UVf&defl=ru&q=define:API&sa=X&oi=glossary_definition&ct=title
> Разве это не ф-ции из длл?
Не обязательно.
Б. Гейтс (2007-10-26 12:47:00) [26]
> А если бы знали, что такое указатели и динамическая память
Указатели - знаю, дин. память - нет. Поподробнее плиз
Еще вопрос: что такое апи вообще? Разве это не ф-ции из длл?
> Таких не берут в программисты
Я пока новичок. Но шансов стать кодером у меня больше, не так ли?
Юрий Зотов (2007-10-26 11:24:00) [27]> Б. Гейтс (26.10.07 10:44) [31]
Короче, луxше всего сказал Вирт: программирование - это алгоритмы плюс структуры данных. Вот это Вам сейчас и нужно изучать - алгоритмы и структуры данных. Причем начинать со структур.
Игорь Шевченко (2007-10-26 11:16:00) [28]Таких не берут в программисты
Юрий Зотов (2007-10-26 11:16:00) [29]> Б. Гейтс (26.10.07 10:44) [31]
Я же не зря сказал - Вам программироватьучиться надо. Потому что программирование- это вовсе не языки. Язык (любой, хоть Васик, хоть Асм) - это всего лишь инструмент и не более того. Взять в руки кисть (инструмент) может каждый и пользоваться ею может тоже каждый - но ведь при этом он не становится художником, верно? Чтобы стать художником, нужно знать и уметь гораздо больше, чем то, как держать кисть (а чтобы стать хорошим художником, еще и способности нужны, а чтобы стать выдающимся художником - талант нужен).
То же самое и с программированием. Если бы Вы понимали, что такое массив в памяти и как адресуются его элементы, то никаких проблем у Вас бы не возникло. И Вы легко смогли бы самостоятельно реализовать любой массив (включая многомерные) на любомязыке (причем без всяких array) - хоть на Паскале, хоть на Асме. А если бы знали, что такое указатели и динамическая память, то легко смогли бы реализовать и любой массив переменной размерности (тоже включая многомерные и тоже на любом языке). Вот что в первую очередь изучать надо, а вовсе не языки и не API.
А Вы говорите - в MASM и в API нет array. Да ведь их там и быть не может, понимаете? И вот эта фраза "как используя АПИ создавать массивы без array, так как использую не паскаль, а масм" - полная чушь. Потому что использование API к созданию массивов не имеет абсолютно никакого отношения, а MASM не имеет абсолютно никакого отношения ни к саозданию массивов, ни к API. В переводе на русский язык Вы спросили примерно следующее: "как, используя паровоз, забить гвоздь, так как использую не молоток, а скрипку".
Рано Вы взялись за MASM и API. Не понимаете Вы их - и не поймете, пока не поймете, что такое програмирование. Возвращайтесь на паскаль и решите Вашу задачу на нем, причем не используя слово array - это будет гораздо полезнее.
Ins (2007-10-26 11:11:00) [30]Эх, тут недавно такое обсуждение про WinAPI было, с участием меня, DVM и Rouse_... Видимо ушло в архив уже. Жаль... Там если повыкидывать лишнее, определение API (и Win32API, как его подмножества) можно выделить.
Ega23 (2007-10-26 11:01:00) [31]
> Кажется, началась стадия обломов...
> Когда говорил паскаль, имел в виду дельфи.
> SetLength
SetLength - для ламеров. "Кулхацкеры", пишущие "массивы на API для масдая" SetLength использовать не должны.
Или сознавайся в собственном ламерстве, или бегом штудировать книгу. Согласен подождать до понедельника.
Б. Гейтс (2007-10-26 10:58:00) [32]
> Покажи, как огранизовать создание динамического массива
> с произвольным числом элементов именно на паскале (не Delphi).
> покажешь - поверю, что тебе это "раз плюнуть". Не покажешь
> - LMD.
Кажется, началась стадия обломов...
Когда говорил паскаль, имел в виду дельфи.
SetLength
Б. Гейтс (2007-10-26 10:56:00) [33]
> блииин. чувак.. знал бы ты, какой бред несешь....
Beginner..
Прокомментируй, исправь, что не так?
Ega23 (2007-10-26 10:55:00) [34]
> Знаю языки: Бейсик, Паскаль, Си (слегка)
> Занимаюсь программированием: с 8-го класса (сперва Бейсик)
Прикольно. Я уже 21 год программированием занимаюсь, из них 8 лет профессионально (мой основной доход).
И, однако, я так не могу сказать про Бейсик и Паскаль. В смысле, "знаю".
> Что такое АПИ (мои знания): функции, экспортируемые длл
> мастдая (user32, gdi32, kernel32 и т.д.
API - Application Programming Interface. Это что угодно может быть. И "масдай" тут вообще сбоку не валялся.
А если уж речь идёт конкретно о Win32API, то это не "функции, экспортируемые длл мастдая".
> Массивами раньше не занимался, работал с ними только в Паскаль,
> а тут на масме. На паскале мне это раз плюнуть
Покажи, как огранизовать создание динамического массива с произвольным числом элементов именно на паскале (не Delphi). покажешь - поверю, что тебе это "раз плюнуть". Не покажешь - LMD.
@!!ex (2007-10-26 10:54:00) [35]> [31] Б. Гейтс (26.10.07 10:44)
блииин. чувак.. знал бы ты, какой бред несешь....
Б. Гейтс (2007-10-26 10:44:00) [36]
> Вам программировать учиться надо, а не модными словечками
> кидаться.
Кхе-кхе...
Знаю языки: Бейсик, Паскаль, Си (слегка)
Занимаюсь программированием: с 8-го класса (сперва Бейсик)
Что такое АПИ (мои знания): функции, экспортируемые длл мастдая (user32, gdi32, kernel32 и т.д.
Что могу на АПИ: создавать оконные приложения, сабклассировать что-нибудь, посылать сообщения
Дополнительно: слегка знаю ПЕ
Массивами раньше не занимался, работал с ними только в Паскаль, а тут на масме. На паскале мне это раз плюнуть, а в масме я с ними ни разу (!) не работал. Пришел к вам за ответом, получил его, за что некоторым огромное спасибо. Заинтересовался списками.
> Массив это базовая структура хранения информации, а никак
> не набор функций какого-либо API. А ты даже не понимаешь
> бредовости выражения «массивы на API».
Имелось в виду как используя АПИ создавать массивы без array, так как использую не паскаль, а масм.
Юрий Зотов (2007-10-26 10:06:00) [37]> Б. Гейтс (26.10.07 08:53) [26]
Месяц - это не "давно". Это даже не "мало". Это - "практически ничто".
Доказательство - Вы даже не понимаете, что такое API; что никаких массивов там нет вообще (и быть не может); что понятие "массив" есть принадлежность языков, а не библиотек; что программировать "на чистом API" невозможно, потому что ни один вызов API нельзя сделать без использования какого-либо языка; что язык, на котором вызываются функции API абсолютно безразличен; что Ваша задача совершенно элементарна; что для ее решения надо всего лишь использовать динамическую память и указатели (организовав их в виде любой подходящей структуры); что как раз для этой задачи дельфишная RTL в 100 раз удобнее, чем WinAPI (и дает практически тот же по эффективности результат).
В общем - знаний ноль, понты одни ("пустяками не занимаюсь"). Вам программироватьучиться надо, а не модными словечками кидаться.
Zeqfreed (2007-10-26 09:25:00) [38]> Тока я не понял про 1-ый вариант [20]. Дайте ссыль кто-нить
> по этому вопросу
http://en.wikipedia.org/wiki/Linked_list
Zeqfreed (2007-10-26 09:22:00) [39]> Б. Гейтс (26.10.07 08:53) [26]
Массив это базовая структура хранения информации, а никак не набор функций какого-либо API. А ты даже не понимаешь бредовости выражения «массивы на API».
Ega23 (2007-10-26 08:57:00) [40]
> Работаю на АПИ давно (месяц)
5 БАЛЛОВ!!!!!!