Delphi 调用Dll

Dll 中写法:

Var
  SaveExit          : Pointer;
  DLLApplication    : TApplication;
  DLLScreen         : TScreen;

{$R *.res}

Procedure LibExit;
Begin
  ExitProc := SaveExit;
End;

Procedure DLLMain(Reason: Integer);
Begin
  Case Reason Of
    DLL_PROCESS_ATTACH: Begin
        DLLApplication := Application;
        DLLScreen := Screen;
      End;
    DLL_PROCESS_DETACH: Begin
        Application := DLLApplication;
        Screen := DLLScreen;
        ZeroMemory(@LocalInfo, SizeOf(LocalInfo));
      End;
  End;
End;


Begin
  DLLProc := @DLLMain;
  DLLMain(DLL_PROCESS_ATTACH);
  SaveExit := ExitProc;
  ExitProc := @LibExit;
End.
      

//以上写在library 中

//下面的写在Unit中

type
  TLocalInfo = Record
    ClientIp: String;
    ClientPCName: String;
    ClientName: String;
    ClientVersion: String;


    User: String;
    UserName: String;
    UserDept: String;
    UserEmail: String;


    NetConnected: Boolean;
    SfcConnected: Boolean;
    ErpConnected: Boolean;
  End;


Procedure Start(pApplication: TApplication; pScreen: TScreen; pLocal: TLocalInfo;obj:TPanel); stdcall; export;


Procedure Start(pApplication: TApplication; pScreen: TScreen; pLocal: TLocalInfo;obj:TPanel);
Begin
  Screen := pScreen;
  Application := pApplication;
  LocalInfo := pLocal;
  Application.CreateForm(TForm1, Form1);
  Form1.Parent := obj;
End;

调用主程序中写法:

var

OpenMDIForm : procedure(pApplication: TApplication; pScreen: TScreen; pLocal: TLocalInfo)stdcall;

dlgOpen1.Execute;
    NamePath := dlgOpen1.FileName;
    if FileExists(NamePath) then
    begin
      DLLHandle := LoadLibrary(PChar(NamePath));
      @OpenMDIForm := GetProcAddress(DLLHandle, 'Start');
      If Assigned(@OpenMDIForm) Then Begin
        OpenMDIForm(Application, Screen, Local);
      end;
    end;


注意:需要设置DLL窗体及调用窗体未MDIForm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值