Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.03;
Скачать: CL | DM;

Вниз

Замена менеджера памяти.   Найти похожие ветки 

 
Alxd   (2003-02-18 21:37) [0]

Есть две DLL написанные на Delphi, подключаемые к стороннему приложению. При их работе активно используются динамические массивы, которыми они могут обмениваются. Соответственно возникает проблема, что данные в разных кучах. Как известно, работа с кучей осуществляется через Memory Manager Delphi.
Подменяю адреса ф-ий GetMem, FreeMem и ReallocMem в менеджере на адреса ф-ий работы с памятью самого приложения. Во время отладки все ок, но как только доходит до первого вызова ReallocMem вылазит Access Violation и все. Финиш. В использовании ShareMem отказано, нужно другое решение. Прошу теоретической помощи.


 
Романов Р.В. ©   (2003-02-18 21:52) [1]

Мобыть вместо всего этого проще использовать FileMapping


 
Alex Konshin ©   (2003-02-19 06:43) [2]

Я так и не понял, что ты делаешь. Ты SetMemoryManager используешь?


 
vedmed ©   (2003-02-19 09:29) [3]

Посмотри
http://www.codexterity.com/fastsharemem.htm
может подойдет


 
REA ©   (2003-02-19 10:04) [4]

DLL отображается в адресное пространство процесса. Если построить обмен таким образом, что тот кто выделяет память ее освобождает, то коллизий не должно быть. Как вариант использовать не динамические массивы, а API функции выделения памяти. Можно еще передать из EXE указатель на свой "менеджер памяти" - функции работы с памятью.


 
icWasya ©   (2003-02-19 10:22) [5]

специально для таких случаев у борланда есть borlndmm.dll
используется так:

во всех проектах , то есть во всех DLL и EXE первым юнитом ставится ShareMem

Program ABCD;
uses
ShareMem,
Forms,
.....



Library A;
uses
ShareMem,
.....


Library B;
uses
ShareMem,
.....


Далее в каталог с EXE и DLL помещается borlndmm.dll.

Должно всё работать.


 
Alxd   (2003-02-19 17:58) [6]

Alex Konshin - конечно SetMemoryManager.
vedmed - спасибо. уже смотрю. но хочется ведь использовать менеджер памяти самого приложения, если оно дает доступ к таким функциям.
REA - все верно. вот только передавать указатель на заранее распределенную память для SetLength не очень удобно, вот и изощряюсь.
icWasya - я написал, что приложение стороннее и sharemem не использовать.
Николай Банников прислал ответ по почте и предложил подменить функции в initialization и finalisation. Вот этого я не пробовал!

Всем спасибо.


 
icWasya ©   (2003-02-19 20:08) [7]

А как ты хочешь достучаться до менеджера памяти самого приложения, если приложение не твоё??


 
Alxd   (2003-02-20 05:32) [8]

Приложение предоставляет такие функции. Экспортирует. А мои DLL соответственно могут их импортировать.



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

Текущий архив: 2003.03.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
14-5730
Ricks
2003-02-13 23:51
2003.03.03
ICQ


1-5550
z_olga_al
2003-02-19 22:05
2003.03.03
автозапуск программы


7-5877
faf
2002-12-26 08:06
2003.03.03
Проблема с видео картой S3 Virge DX


1-5631
Dunkan
2003-02-19 10:28
2003.03.03
КТО ЗНАЕТ, КАК КИНУТЬ НА ФОРМУ TAnimated И КАК СДЕЛАТЬ ЗЕЛЁНЫЙ ФО


14-5767
professor
2003-02-16 20:17
2003.03.03
Вируссссссссссссссссссссссссс