• Delphi中一些DLL的运用。


     
    临时转载一些别人的代码:
     
    代码
    dll 调用部分:

    {****************************************************************}
    { }
    { Project: DllDebug                                  }
    { Copyright(c) 2003, 2005                 }
    { Unit for UCommonUnit                          }
    { Create  : 2003-01-05 by 林红卫             }
    { Modify  : 2003-01-16 by 林红卫             }
    {                                                                }
    {****************************************************************}

    unit UCommonUnit;

    interface

    uses
      Windows,
      SysUtils,
      Forms;

    type
      TRunDLL 
    = procedure(DLLName, FormName, FormCaption: PChar;
        aApp: TApplication; Scr: TScreen) 
    stdcall;

    procedure RunDLLForm(DLLName, FormName, FormCaption: string;
      aApp: TApplication; Scr: TScreen) 
    stdcall;

    implementation

    procedure RunDLLForm(DLLName, FormName, FormCaption: string;
      aApp: TApplication; Scr: TScreen) 
    stdcall;
    var
      RunDLL: TRunDLL;
      GetDllHWND: HWND;
    begin
      GetDllHWND :
    = LoadLibrary(PChar(DllName));
      
    try
        
    if GetDllHWND < 32 then
        
    begin
          MessageBox(
    0'没有找到附带DLL文件,请确认程序是否完整!',
            
    '加载DLL失败', MB_OK);
          Exit;
        
    end;

        @RunDLL :
    = GetProcAddress(GetDllHWND, 'RunDLL');
        
    if @RunDLL <> nil then
        
    try
          RunDLL(PChar(UpperCase(Trim(DLLName))), PChar(UpperCase(Trim(FormName))),
            PChar(FormCaption), aApp,Scr);
        
    except
          
    raise Exception.Create('T' + FormName + '不存在!');
        
    end;
      
    finally
        FreeLibrary(GetDllHWND);
      
    end;
    end;

    end.

    dll :

    {****************************************************************}
    { }
    { Project: UDllTest                      }
    { Copyright(c) 2003, 2005                 }
    { Unit for UDllTest                             }
    { Create  : 2003-01-05 by 林红卫             }
    { Modify  : 2003-01-16 by 林红卫             }
    {                                                                }
    {****************************************************************}

    library UDllTest;

    uses
      SysUtils,
      Forms,
      Messages,
      Variants,
      Windows,
      Classes,
      UFrmTestForm1 
    in 'UFrmTestForm1.pas' {Form1},
      UFrmTestForm2 
    in 'UFrmTestForm2.pas' {Form2};

    var
      DLLApp: TApplication;
      DLLScreen: TScreen;

    procedure RunDLL(DLLName, FormName, FormCaption: PChar;
      aApp: TApplication; Scr: TScreen) 
    stdcall;
    var
      TheClass: TPersistentClass;
      aForm: TForm;
    begin
      Application :
    = aApp;
      Screen :
    = Scr;
      RegisterClasses([TForm1, TForm2]);

      TheClass :
    = GetClass('T' + FormName);
      
    if (TheClass = nilthen
        GetLastError;

      
    if TheClass.InheritsFrom(TForm)
        
    and (TheClass <> TForm) then
      
    begin
        aForm :
    = TForm(TheClass.Create).Create(nil);
        aForm.Caption :
    = FormCaption;
        
    try
          aForm.ShowModal;
        
    finally
          FreeAndNil(aForm);
        
    end;
      
    end;
    end;

    procedure DLLUnloadProc(dwReason: DWORD);
    begin
      
    if dwReason = DLL_PROCESS_DETACH then
      
    begin
        Application :
    = DLLApp; //恢复
        Screen :
    = DLLScreen;
      
    end;
    end;

    exports
      RunDLL;

    begin
      DLLApp :
    = Application; //保存 DLL 中初始的 Application 对象
      DLLScreen :
    = Screen;
      DLLProc :
    = @DLLUnloadProc; //保证 DLL 卸载时恢复原来的 Application
      DLLUnloadProc(DLL_PROCESS_DETACH);
    end.
  • 相关阅读:
    用户描述
    课堂练习
    一阶段11.21
    一阶段11.20
    一阶段 11.19
    自己动手写spring(五) bean的生命周期管理
    自己动手写spring(四) 整合xml与注解方式
    自己动手写spring(三) 支持注解方式
    自己动手写spring(二) 创建一个bean工厂
    自己动手写spring(一) 使用digester
  • 原文地址:https://www.cnblogs.com/kfarvid/p/1778930.html
Copyright © 2020-2023  润新知