Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В куче - список из строк(HeapAlloc & HeapFree) 
:(
    Опции темы
JJohn
Дата 3.10.2005, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



есть вот такой вопрос...

Требуется разместить в куче список из N строк...

Цитата
var P:Pointer;
P:=HeapAlloc(GetProcessHeap(), 0, dwBytes);
...
HeapFree(GetProcessHeap(), 0, P);


не пойму, что находится в '...', то есть как в динамически выделенную память размещать данные?

в голову почему-то лезет только что-то типа lstrcpy(P, 'строка') в цикле - где-то видел в какой-то программе...

Объясните, plzz

P.S.> Новичок с работой с памятью и API
PM MAIL   Вверх
rsm
Дата 4.10.2005, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код написал, но только на Си, нету у меня сейчас Дельфи smile Не боись, кто-нибудь тебе на Дельфи перепишет smile
Код

#include <windows.h>

void start()
{
    char buff[10];
    int i;
    void *p, *s;
    HANDLE hHeap;

    hHeap = GetProcessHeap();
    // взяли памяти
    s = p = HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 500);

    // пишем в выделенную память
    for(i = 0; i < 10; i++)
    {
         // строка, помещаемая в память
        wsprintf((LPSTR) buff, "String%d", i);
        
        // копируем строку в память
        lstrcpy((LPSTR) s, (LPSTR) buff);
        
        // получаем адрес в памяти после скопированной строки
        s = (void*) ((DWORD) s + lstrlen((LPSTR) buff) + 1);
    }

    s = p;
    // читаем из выделенной памяти
    for(i = 0; i < 10; i++)
    {
        // копируем строку в буфер
        lstrcpy((LPSTR) buff, (LPSTR) s);

        // покажем ее
        MessageBox(0, (LPSTR) buff, NULL, 0);

        // получим адрес следующей строки
        s = (void*) ((DWORD) s + lstrlen((LPSTR) buff) + 1);
    }

    // освободили память
    HeapFree(hHeap, 0, p);
}

PM MAIL   Вверх
Snowy
Дата 4.10.2005, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Код

move(s[1],p^,Length(s));

Где s - string, в котором находится нужный текст.
Если строк много - сложи в одну, разделенную CR/LF
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

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


 




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


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

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