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.
    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    数组-11. 猴子选大王
    *数组-10. 求整数序列中出现次数最多的数
    数组-07. 求一批整数中出现最多的个位数字
    *数组-05. 字符串字母大小写转换
    数组-04. 查找整数
    《结对-网页贪吃蛇-最终程序》
    Forward团队-爬虫豆瓣top250项目-项目进度
    《结对-HTML贪吃蛇游戏项目-测试过程》
    课后作业-阅读任务-阅读提问-2
    《20171005-构建之法:现代软件工程-阅读笔记》
  • 原文地址:https://www.cnblogs.com/jijm123/p/14043460.html
Copyright © 2011-2022 走看看