• 0
Авторизация  
des80

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

Вопросы

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 ответов на этот вопрос

  • 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 выделили, в приложении освободили.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

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

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