• delphi 开发扩展(一)


    {主程序}

    unit Unit2;


    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;

    type
      TPluginName = Function:string; stdcall;
      TShowPerSN  = function(AHandle:THandle;ADOConn:TADOConnection;ACaption:String):BOOL;StdCall;

    type
      TForm2 = class(TForm)
        ListBox1: TListBox;
        ADOConnection1: TADOConnection;
        procedure FormCreate(Sender: TObject);
        procedure ListBox1DblClick(Sender: TObject);
      private
        LibHandle: HMODULE;
        procedure LoadPlugins;
        procedure LoadPlugin(sr: TSearchRec);
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form2: TForm2;

    implementation

    {$R *.dfm}


    procedure TForm2.FormCreate(Sender: TObject);
    begin
      LibHandle:=0;//初始化LibHandle的值。
      LoadPlugins;//调入LoadPlugins过程。
    end;

    procedure TForm2.LoadPlugins;
    var
      sr: TSearchRec;
      path: string;
      Found: Integer;
    begin
      path := ExtractFilePath(Application.Exename);
      try
        Found := FindFirst(path + '*.DLL', 0, sr);
        while Found = 0 do//查找文件。
        begin
          LoadPlugin(sr);
          Found := FindNext(sr);
        end;
      finally
        FindClose(sr);
      end;
    end;



    procedure TForm2.ListBox1DblClick(Sender: TObject);
    var k:TPluginName;ShowPerSN:TShowPerSN;
    begin
      if ListBox1.ItemIndex<>-1 then
      begin
        if LibHandle<>0 then
          FreeLibrary(LibHandle);

        LibHandle:= LoadLibrary(Pchar(self.ListBox1.Items[self.ListBox1.ItemIndex]));
        if LibHandle <> 0 then
        begin
          try
            @k:= GetProcAddress(LibHandle, 'GetName');
            self.Text:=k;

            @ShowPerSN:= GetProcAddress(LibHandle,'GetForm');
            if not (@ShowPerSN   =   nil)   then
            begin
               ShowPerSN(application.Handle,ADOConnection1,'');
               Invalidate;
            end;
          Except
            FreeLibrary(LibHandle);
            LibHandle:=0;
          end;
        end
        else
          ShowMessage('loading Dll file error!');
      end;
    end;



    procedure TForm2.LoadPlugin(sr: TSearchRec);
    var
      iLibHandle: HMODULE;
    begin
      iLibHandle := LoadLibrary(Pchar(sr.Name));
      if iLibHandle <> 0 then
      begin
        try
           ListBox1.Items.Add(sr.Name);
        finally
          FreeLibrary(iLibHandle);
        end;
      end else
        ShowMessage('loading Dll file error!');
    end;

    end.

  • 相关阅读:
    Servlet再度学习
    JSP九大内置对象
    Java I/O学习
    Java内存管理
    数据库面试常问的一些基本概念
    JVM类加载原理学习笔记
    Ajax原理学习
    Java基础之泛型
    Java基础之集合
    java多线程快速入门(二)
  • 原文地址:https://www.cnblogs.com/azhai/p/1595107.html
Copyright © 2020-2023  润新知