Вверх ↑
Ответов: 4631
Рейтинг: 749
#1: 2015-11-13 13:58:11 ЛС | профиль | цитата
Можно перед инициализацией DLL передавать в неё свой Memory Manager:
В THIUseHiDLL.SetName

#pas
var
MM: TMemoryManager;
Proc: procedure (const MemMgr: TMemoryManager);
begin
.....
Proc = GetProcAddress(FID,'SetShareMemoryManager');
GetMemoryManager(MM);
Proc(MM);
.....

В make_dll.dpr сформировать следующий код для сгенерированного проекта DLL:

#pas

var
OldMM: TMemoryManager

.....

procedure SetShareMemoryManager(const MemMgr: TMemoryManager);
begin
GetMemoryManager(OldMM); // Сохранить менеджер DLL
SetMemoryManager(MemMgr); // Задать менеджер, переданный из exe-шника
end;

.....

exports
...
SetShareMemoryManager;

.....

finalization
SetMemoryManager(OldMM); // Вернуть старый менеджер
// Возможно лучше делать не здесь, а в DLLProc при выгрузке DLL
end.

Либо из exe-шника передать функцию, конструирующую копию строки. DLL будет вызывать эту функцию при выдаче строк "наружу".
карма: 26

0