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.

  • 相关阅读:
    vs code python 关于无法找到文件路径的问题 No such file or directory
    vs2017 c# 控制台 输出中文显示问号 ; vs2017 c# 控制台 输出中文显示乱码
    web页面实现指定区域打印功能
    html 实现动态在线预览word、excel、pdf等文件(方便快捷)
    vuetify使用时遇到的坑:默认颜色显示不了
    【VS Code】中node.js代码自动补全的方法
    vue-property-decorator使用指南
    关于webpack,babel,以及es6和commonJS之间的联系(转)
    tslint.json的配置项说明
    [TypeScript] vs code TSLint常见错误解决方案
  • 原文地址:https://www.cnblogs.com/azhai/p/1595107.html
Copyright © 2011-2022 走看看