![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Создание динамических переадресаций функций в Delphi и C++BuilderDelphi , Файловая система , DLL и PlugInsВопрос о возможности создания динамических библиотек (DLL) с переадресацией экспортируемых функций в Delphi аналогично тому, как это делается в C/C++, является довольно интересным. В C/C++ такая возможность реализуется с помощью директивы препроцессора или файла определения экспортов (.def), что позволяет одной библиотеке "перехватывать" вызовы функций и перенаправлять их в другую библиотеку. Вопрос заключается в том, можно ли достичь подобного результата в Delphi, используя, при необходимости, компилятор CLI. Описание проблемыВ C/C++ разработчики могут создавать DLL, экспортирующие функции, которые перенаправляются на функции в другой DLL, без использования загрузчика-оболочки. Это достигается с помощью специальных директив, таких как:
или с использованием файла определения экспортов (.def):
Эти подходы позволяют создать оболочку для DLL, которая перегружает только определенные функции, перенаправляя остальные, без необходимости создания загрузчика-оболочки для каждой экспортируемой функции. Возможность в DelphiВопрос заключается в том, можно ли в Delphi создать подобный оболочечный DLL, который будет переадресовывать вызовы функций в другую DLL. В контексте Delphi это может быть полезно для создания более легковесных и гибких DLL, которые могут использовать функции из других библиотек без необходимости включать весь код в одном DLL. ПримерДопустим, у нас есть реальная DLL с функцией:
И оболочечный DLL, который "перехватывает" вызов этой функции:
Здесь видно, что параметры функции могут быть безопасно опущены, но все еще требуется указать тип возвращаемой функции. Программа, использующая оболочечный DLL, будет выглядеть так:
Этот пример компилируется и работает, но Dependency Walker показывает его как обычный экспорт, который просто вызывает импортированную функцию. Подтвержденный ответВ соответствии с комментариями, Delphi не поддерживает создание таких DLL напрямую. Для достижения подобного результата потребуется выполнить некоторую постобработку, если вы хотите создать DLL с переадресацией функций из Delphi. Однако, если использовать C++Builder, который поддерживает файлы определения экспортов (.def) для объявления Альтернативный путьЕсли Delphi не поддерживает создание таких DLL, можно рассмотреть следующие альтернативные пути:
ЗаключениеТаким образом, хотя Delphi не имеет встроенной поддержки для создания DLL с переадресацией функций, C++Builder может предложить некоторые возможности в этом направлении. В любом случае, разработчикам, возможно, придется использовать дополнительные инструменты или написать собственные утилиты для постобработки библиотек. Вопрос о возможности создания динамических библиотек с переадресацией функций в Delphi, аналогично тому, как это делается в C/C++. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: DLL и PlugIns ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |