Какие принципы должны сопровождаться для создания DLL созданным с помощью работ Delphi хорошо в другой версии Delphi?

Хм. Можно определить атрибут VaryByCustom на объекте OutputCache. Значение этого передается в качестве параметра методу GetVaryByCustomString, который можно реализовать в global.asax. Значение, возвращенное этим методом, используется в качестве индекса в кэшируемые элементы - при возврате количества комментариев к странице, например, каждый раз, когда комментарий добавляется будет кэшироваться, новая страница.

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

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

5
задан Community 23 May 2017 в 10:33
поделиться

3 ответа

Определение строки изменилось с D2009. Если вы хотите сделать строковую связь безопасной, используйте PAnsiChar или WideString.

Основное правило связи через библиотеки DLL - не использовать ничего специфического для Delphi, поэтому никаких строк Delphi и потомков TObject. Однако интерфейсы, записи и типы COM работают нормально.

8
ответ дан 13 December 2019 в 05:37
поделиться

Вы спросите:

Один раз И снова у меня вопрос: каким принципам следует следовать, чтобы инкапсуляция класса в dll была совместима с другой версией Delphi?

и есть только один: не делайте этого. Вы не можете этого сделать. Либо вы пишете DLL, а затем используете идиомы и типы данных, которые можно безопасно использовать в библиотеках DLL, что исключает (среди прочего) классы.

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

2
ответ дан 13 December 2019 в 05:37
поделиться

Используйте только основные типы. Если вы используете интерфейсы, создавайте их с помощью редактора библиотеки типов, чтобы с самого начала были ограничены совместимыми типами. Хорошее практическое правило - взглянуть на API Windows и попытаться подражать его соглашениям о вызовах.

Вы можете использовать классы в своей DLL, но вы просто не можете раскрыть их как таковые. Хорошая идиома, которая хорошо работает с DLL, - это концепция дескриптора. Ваша DLL создает объект и возвращает дескриптор этого объекта. Когда вам снова нужно работать с этим объектом, вы передаете функции в DLL дескриптор. Просто помните, что ваша DLL должна полностью отвечать за память и время жизни объекта. Это тривиальный процесс создания функций DLL для предоставления доступа к частям класса, к которым вам также потребуется доступ.

Со стороны Дельф, затем вы можете написать оболочку прокси, которая скрывает дескриптор от пользователя. Для событий вы можете использовать метод обратного вызова. Обычно вы передаете указатели на функции, не являющиеся объектами, в dll, которая затем вызывает функцию для события. Краткий обзор этого процесса доступен на Delphi 3000 .

2
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: