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.

  • 相关阅读:
    谁知道怎么获得客户端的语系,不是encoding哦
    如何动态控制弹出窗体的大小
    维权成功!
    KFC的mm在练习做圣代
    CICD自动化发版系统设计简介
    java IO (File类)
    StringBuffer
    Arrays和比较器
    java正则
    Math和Random类
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2358355.html
Copyright © 2011-2022 走看看