В 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 будет вызывать эту функцию при выдаче строк "наружу".