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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
3-5422
IUSUPp
2003-02-12 23:16
2003.03.03
Не работает прога с *.mdb на другой машине


3-5414
georges
2003-02-12 16:09
2003.03.03
Существуют ли в Paradox времмненые таблицы


9-5372
Ricks
2002-09-22 12:37
2003.03.03
Clipping, или как там


1-5491
Silver_
2003-02-20 17:47
2003.03.03
TActionMainMenuBar


3-5393
wara
2003-02-07 12:59
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский