zoukankan      html  css  js  c++  java
  • 主控程序之插件装载器一

    对于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.

  • 相关阅读:
    [HEOI2015]兔子与樱花
    [HNOI2015]亚瑟王
    [JSOI2011]分特产
    某考试 T3 sine
    [JSOI2015]最小表示
    51NOD 1258 序列求和 V4
    Codeforces 622F The Sum of the k-th Powers
    Loj #6261. 一个人的高三楼
    [HAOI????] 硬币购物
    bzoj4318 OSU!
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2358355.html
Copyright © 2011-2022 走看看