• 主控程序之插件装载器一


    对于DELPHI来说,总共支持俩种类型的插件:DLL和BPL方式的插件。

    对于比较完美的插件框架来说,俩种类型的插件都要支持。

    unit DLLLoader;

    interface

    uses
      windows, Classes, SysUtils, Forms, StrUtils;

    type
      TLibraryType = (dll, bpl);  // plugin type: dll or bpl

      TDLLLoader = class(TObject)
      private
        FHandle: THandle;
        FFileName: string;
        FLibraryType: TLibraryType;
        procedure SetFileName(const Value: string);
      protected
        function GetApplicationPath: string;
      public
        constructor Create(DllFileName: string);
        destructor destroy(); override;
        procedure FreeHandle(); virtual;
        property FileName: string read FFileName write SetFileName;
        property DLLHandle: THandle read FHandle;
      end;

    implementation

      { TDLLLoader }

    constructor TDLLLoader.Create(DllFileName: string);
    var
      ext: string;
    begin
      ext := RightStr(DllFileName, 4);
      if ext = '.dll' then FLibraryType := dll
      else if ext = '.bpl' then FLibraryType := bpl;
      FileName := DLLFileName;
    end;

    destructor TDLLLoader.destroy;
    begin
      FreeHandle;
      inherited;
    end;

    procedure TDLLLoader.FreeHandle;
    begin
      if FHandle <> 0 then
        case FLibraryType of
          dll: FreeLibrary(FHandle);
          bpl: UnloadPackage(FHandle);
        end;
    end;

    function TDLLLoader.GetApplicationPath: string;
    begin
      result := ExtractFilePath(Application.ExeName);
    end;

    procedure TDLLLoader.SetFileName(const Value: string);
    begin
      if FFileName <> Value then
      begin
        FFileName := Value;
        case FLibraryType of
          dll: FHandle := LoadLibrary(PChar(FFileName));
          bpl: FHandle := LoadPackage(FFileName)
        end;
        if FHandle = 0 then
          raise Exception.Create(Value + 'load plugin fail.');
      end;
    end;

    end.

  • 相关阅读:
    树莓派控制Arduino
    树莓派的基本配置
    OneNet的产品创建和支持协议
    云平台基本认知(OneNet)
    初识Arduino
    NEFU-大二大三训练赛17C-最大值
    NEFU-大二大三训练赛17D-泡泡堂
    pb数据导出
    PB窗口根据分辨率的大小调整窗口大小
    PowerBuilder常用字符串函数
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2358355.html
Copyright © 2020-2023  润新知