Главная страница
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.02 c
1-5537
sndanil
2003-02-21 12:43
2003.03.03
Графики


1-5589
Mika
2003-02-19 19:55
2003.03.03
Обработка события


3-5441
VovikA
2003-02-13 13:07
2003.03.03
Как прочитать и откатить транзакцию в MS Sql 200


4-5921
Vox
2003-01-16 23:55
2003.03.03
Inter Process Communication


1-5563
Flashas
2003-02-19 14:34
2003.03.03
profesionaly, Gde QuickReport v Delphi 7?....