Главная страница
    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.45 MB
Время: 0.009 c
1-5627
VIB
2003-02-20 10:44
2003.03.03
Printer


3-5408
Prihod
2003-02-12 16:03
2003.03.03
Кто знает как подключиться к базам данных FoxPro из Delphi 6...


8-5663
DimaK
2002-11-14 23:09
2003.03.03
Ребята, помогите разобраться со звуком.


14-5821
anbezr
2003-02-13 12:14
2003.03.03
Как просмотреть только мои вопросы


14-5852
Oleg_Gashev
2003-02-14 02:37
2003.03.03
Скриншот почтового ящика Буша





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский