Показать сообщение отдельно
  #4  
Старый 13.12.2010, 04:37
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

0. пишем в dll функцию, которая освобождает блок памяти указанного размера.
1. Анализируем массив (список) строк. Нам надо получить суммарный размер строк + 1 символ для каждой строки + еще 1 символ.
2. Выделяем кусок памяти в PChar размером из п.1.
3. Зануляем его.
4. начинаем запихивать в него наши строки (КОПИРОВАНИЕМ!!!). В конце каждой строки стоит #0, и в конце всего блока памяти стоит еще один #0 (т.е. в самом конце будет #0#0).
5. возвращаем через var параметры указатель на сам блок памяти и переменную с его размером.

6. В основной программе разворачиваем это все обратно и вызываем функцию из п.0 для освобождения памяти. Почему так - не спрашивай. Просто запомни, что память должна быть освобождена в том модуле (dll, exe), где она выделена. Если очень интересно, то читай об управлении памятью. Но проще просто запомнить вышесказанное правило.

А вообще, подключи модуль ShareMem (и в exe и в dll) и передавай сразу строки. Только тогда не на Дельфе не получится ничего написать в такую систему.
Ответить с цитированием