Перейти к содержанию
Fire Monkey от А до Я
  • 0

borlndmm.dll при написании dll


des80

Вопрос

Сегодня внезапно узнал от коллеги, что при написании dll на Delphi к приложению, которое их использует нужно обязательно подкладывать файл borlndmm.dll, т.к. иначе могут возникать ошибки и утечки памяти при использовании dll.
Это действительно так или это устаревшая информация? в интернете не нашел никакой информации об этом вообще, хотя по идее это должно быть описано в каждом уроке о создании dll в Delphi.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Не используйте дельфовые типы (в частности - строки как отдельно так и в составе record-ов) при передаче параметров в / из длл и не надо будет никаких костылей в виде borlndmm.dll и т.п.
Представьте, что ваша длл будет вызываться из приложения на C++ и используйте только совместимые типы для экспортируемых функций.

Я думаю, не надо говорить, что экземпляры классов 100% не стоит передавать между длл и exe.

Ссылка на комментарий
  • 0

Кроме работ со строками может потребоваться и память выделять в DLL...


Если и приложение и DLL на Delphi то лучше использовать SimpleShareMem
Тогда никаких borlndmm.dll не требуется.

Ссылка на комментарий
  • 0
15 часов назад, ramir сказал:

может потребоваться и память выделять в DLL...

Каким образом соотносятся выделение памяти в модуле и использование borlndmm.dll ?

Опять-таки, любой ShareMem никак не позволит скрестить модули, написанные в разных средах разработки. Да даже в рамках Delphi, но разных версий это может быть чревато https://stackoverflow.com/a/26900922/4908529

Изменено пользователем kami
Ссылка на комментарий
  • 0
4 часа назад, kami сказал:

Каким образом соотносятся выделение памяти в модуле и использование borlndmm.dll ?

Самым прямым. Чтобы менеджер памяти единый был. Тогда можно спокойно использовать GetMem/FreeMem и т.п.

Например, приложение может быть, на Delphi, а DLL на Builder-e, внутри которой нужно динамические массивы создавать.

Конечно, если используются различные среды, то дельфовые строки и стандартные процедуры выделения/освобождения памяти использовать не стоит.

ТС свой сценарий использования dll не описал, поэтому можно пофантазировать...

Ссылка на комментарий
  • 0
43 минуты назад, ramir сказал:

Тогда можно спокойно использовать GetMem/FreeMem и т.п

Я вас удивлю, но GetMem / FreeMem внутри инстанса можно использовать без ограничений, не задействуя ShareMem. Совершенно спокойно. И не только их.
Динамические, статические массивы, объекты и их списки, переменные идущие в анонимные методы - абсолютно всё требует выделения памяти. И это всё разруливается встроенным в инстанс менеджером.

ShareMem нужен, если вы решаете что-либо подобное экспортировать из своего инстанса. Или принять извне. Но в этом случае - автор интерфейса длл и/или exe сам себе злобный Буратино.

Изменено пользователем kami
Ссылка на комментарий
  • 0

Конечно, имелось ввиду выделение и освобождение памяти в разных "местах". И без ...ShareMem будет N менеджеров.

Ничего зазорного не вижу, если из DLL получаем динамический массив. Я привел пример Delphi/Builder. В dll выделили, в приложении освободили.

Только надо четко понимать как это работает и применять, если нет более простого решения.

Ссылка на комментарий
  • 0
1 час назад, ramir сказал:

В dll выделили, в приложении освободили.

За сим дискуссию предлагаю считать законченной :( К сожалению, не вы один используете подобные грабли. Но не надо агитировать на подобное и других.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...