Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Память, EXE, DLL   Найти похожие ветки 

 
Qwer   (2004-03-25 16:25) [0]

Хочу спросить: Как сделать так, чтобы можно было выделить память (GetMem(p,1024)) в программе, а затем освободить её в DLL(FreeMem(p,1024)). Если просто так сделать, то будет исключение.


 
Digitman ©   (2004-03-25 16:32) [1]

корректных вариантов не менее чем два :

1. Оба проекта собираются с опцией Build With Run-Time Packages
2. Оба проекта в USES первой же позицией имеют модуль ShareMem

1-й вариант предпочтительней, когда речь идет о разработке обоих проектов не иначе как в среде Делфи


 
Qwer   (2004-03-25 16:36) [2]

ShareMem не помогает... проверял...


 
Юрий Зотов ©   (2004-03-25 16:43) [3]

IMHO, если такая необходимость возникла, то это следствие недостаточно продуманной структуризации. Чем это вызвано?


 
hexone ©   (2004-03-25 16:46) [4]

IMalloc +  CoTaskMemAlloc + CoTaskMemFree


 
Qwer   (2004-03-25 16:48) [5]

ну, например, прога разбита на модули. один модуль, например, декодирует какие-то данные. параметров 4: указатель1, размер1, указатель2, размер2(тут легко догадаться что к чему). под второй указатель память выделяется в либе. как её освободить в проге? обращаться к либе? не очень-то удобно... Хочется чтобы можно было работать с указателями свободно... я когда-то видел такой код...


 
TUser ©   (2004-03-25 17:36) [6]

Не очень понятно о чем речь, но если оно действительно надо - тогда из проги вызывать в DLL некую функцию, которая освобождает память.


 
KSergey ©   (2004-03-25 18:45) [7]

> Qwer   (25.03.04 16:48) [5]

Надо просто и второй буфе выделять в приложении.
Если размер заранее не известен - можно либо в либе сделать ф-цию вычисления требуемого (ели это просто, т.е. не надо декодировать), либо сделать CallBack ф-цию, которая будет вызываться из либы для выделения приложением дополнительной памяти, если ее не хватает.
Вижу еще вариант: либа декодирует, сваливает в свой буфер. (второй буфер изначально в ф-цию декодирования не передается). Потом приложение спрашивает: каков вышел буфер? либа отвечает, прога расколбасивает требуемый объем и говорит либе "по этому указателю копирни ка мне свои данные". Или даже просто либа возвращает указатель на свой буфер, прога копирует - а потом вызывает ф-цию типаFree (либа свой буфер освобождает).
Понятно, что двойной расход...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.045 c
1-1079771298
Rentgen
2004-03-20 11:28
2004.04.11
Номер компонента


3-1081599322
Locker
2004-04-10 16:15
2004.04.11
Ограничение длины результирующих полей


3-1078982260
Лысый
2004-03-11 08:17
2004.04.11
Запрос


1-1080197934
IceMaster
2004-03-25 09:58
2004.04.11
Как в фотошопе


4-1079699165
AlexAn
2004-03-19 15:26
2004.04.11
Как, используя функции API, завершить работу другой программы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский