Текущий архив: 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.45 MB
Время: 0.009 c