zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    第三第四周的笔记
    第一二周的笔记
    jQuery的一些笔记
    函数的执行环境与调用对象
    从click事件理解DOM事件流
    慕课编程题JS选项卡切换
    adb(11)-重新挂载 system 分区为可写
    adb(10)-屏幕截图/录制
    adb(9)-查看设备信息
    adb(8)-查看日志
  • 原文地址:https://www.cnblogs.com/azhai/p/1595107.html
Copyright © 2011-2022 走看看