Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Модуль-заготовка для динамического подключения библиотек

Delphi , Файловая система , DLL и PlugIns

Модуль-заготовка для динамического подключения библиотек

Автор: Panov
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Модуль-заготовка для динамического подключения библиотек.

Модуль подключается к проекту.
Для загрузки и выгрузки библиотек используется по одной функции.

Зависимости: windows.pas, sysutils.pas
Автор:       panov, panov@hotbox.ru
Copyright:   нет
Дата:        30 марта 2004 г.
***************************************************** }

unit proc;

interface
uses windows, sysutils, classes;

const
  _MyLibraryName = '..\dll\proc.dll'; //имя библиотеки
var
  hLib: THandle;

procedure LoadLib;
procedure UnloadLib;

implementation

procedure LoadLib;
begin
  if hLib <> 0 then
    Exit;
  hLib := LoadLibrary(PChar(_MyLibraryName));
  if (hLib = 0) then
  begin
    raise Exception.Create('Не могу загрузить библиотеку ' + _MyLibraryName);
    Exit;
  end;
end;

procedure UnloadLib;
begin
  FreeLibrary(hLib);
  hLib := 0;
end;

initialization
  hLib := 0;
end.

Пример использования:

unit proc;

interface
uses windows, sysutils;

const
  _MyLibraryName = '..\dll\proc.dll'; //имя библиотеки
var
  hLib: THandle;

  ExecCmd: procedure(const aCommand: string; const aShow, aWaitExit: Boolean);

procedure LoadLib;
procedure UnloadLib;

implementation

procedure LoadLib;
begin
  if hLib <> 0 then
    Exit;
  hLib := LoadLibrary(PChar(_MyLibraryName));
  if (hLib = 0) then
  begin
    raise Exception.Create('Не могу загрузить библиотеку ' + _MyLibraryName);
    Exit;
  end;

  @ExecCmd := GetProcAddress(hLib, 'ExecCmd');
end;

procedure UnloadLib;
begin
  FreeLibrary(hLib);
  hLib := 0;
end;

initialization
  hLib := 0;
end.

{
В любом модуле пишем:

  uses proc;
...
  LoadLib; //Загрузка библиотеки.
  ExecCmd('c:\command.com',True,True);
  UnloadLib; //Выгрузка библиотеки.
}

Вот перевод текста на русский язык:

Эта часть модуля Delphi обеспечивает динамическое загрузку библиотеки, позволяя загружать и выгружать библиотеки в runtime. Модуль предназначен для использования с единицами Windows и SysUtils.

Модуль определяет два процедура: LoadLib и UnloadLib. Процедура LoadLib загружает указанную библиотеку с помощью функции LoadLibrary и проверяет, была ли загрузка успешной. Если не было, она выбрасывает исключение. Процедура UnloadLib выгружает загруженную библиотеку с помощью функции FreeLibrary.

Модуль также определяет константу _MyLibraryName, которая specifies имя библиотеки для загрузки. Это можно изменить, чтобы загрузить другую библиотеку.

В примере использования процедура LoadLib вызывается перед использованием функций из загруженной библиотеки. Процедура UnloadLib вызывается, когда библиотека больше не нужна.

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

Вот некоторые предложения по улучшению:

  1. Обработка ошибок: текущая обработка ошибок quite basic. Вам может понравиться использовать более сложные механизмы обработки ошибок, такие как блоки try-except или классы исключений.
  2. Организация кода: код мог быть организован в отдельных единицах или модулях для лучшей поддерживаемости и повторного использования.
  3. Управление библиотеками: модульcurrently загружает и выгружает библиотеку глобально. Вам может понравиться реализовать механизм управления несколькими библиотеками или выгрузить конкретные библиотеки.
  4. Документация: комментарии предоставляют некоторые основные сведения о модуле, но было бы полезно включить более детальную документацию, например, описания параметров функций и процедур.

Вот обновленная версия кода с улучшенной обработкой ошибок и организацией:

unit Proc;
interface
uses Windows, SysUtils, Classes;
const
  _MyLibraryName = '..\dll\proc.dll'; // имя библиотеки
type
  TProcModule = class
  private
    FhLib: THandle;
    procedure LoadLib;
    procedure UnloadLib;
  public
    constructor Create;
    destructor Destroy; override;
  end;
var
  ProcModule: TProcModule;
implementation
constructor TProcModule.Create;
begin
  FhLib := 0;
end;
destructor TProcModule.Destroy;
begin
  UnloadLib;
  inherited Destroy;
end;
procedure TProcModule.LoadLib;
begin
  if FhLib <> 0 then Exit;
  FhLib := LoadLibrary(PChar(_MyLibraryName));
  if FhLib = 0 then
    raise Exception.Create('Failed to load library ' + _MyLibraryName);
end;
procedure TProcModule.UnloadLib;
begin
  FreeLibrary(FhLib);
  FhLib := 0;
end;
initialization
  ProcModule := TProcModule.Create;
finalization
  ProcModule.Free;
end.

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

Модуль-заготовка для динамического подключения библиотек в Delphi, позволяющий загружать и выгружать библиотеку с помощью функций LoadLibrary и FreeLibrary.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DLL и PlugIns ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:52:00/0.0058860778808594/1