一、我想用无窗体的程序调用一个DLL(登录窗体),如果写主调用程序?
二、登录身份验证通过后再调用另一个DLL(导航台),其中导航台有个“注销”功能,即回到主调用程序,重新调用DLL(登录窗体),这又如何实现?不知道我的叙述大家都明白没有,还请大家多多帮忙,谢谢各位!

解决方案 »

  1.   

     
    Application.Initialize;
     Application.Run;
       Dll := LoadLibrary('DllLogin.dll');
      if Dll < 32 then
      begin
        Application.Terminate;
      end;
        ShowModalFormByClassName('TSysLoginForm');//自定义的一个函数
        //登陆成功后:LoadLibrary('DllMain.dll');
        FreeLibrary(Dll);
      end
      这是我写的EXE+BPL+Dll的程序,
    因为DLL不能实现DLL部窗体继承和注册窗体类,所以我用到了BPL来嵌入。
    当然,如果你不用到窗体继承和注册窗体类的话,可以不用BPL。
      

  2.   


    Visible := False;//隐藏主窗口
    Dll := LoadLibrary('DllLogin.dll');
      if ShowModalFormByClassName('TSysLoginForm') = mrOk then
      begin
        //登陆成功事件。
        FreeLibrary(Dll);
        Visible := true;//显示主窗口
      end
    //因为我做的是数据库应用程序开发,很多地方各个DLL都要共同继承一个窗口,和注册类。所以用了BPL,所以并不是完全的DLL开发。ShowModalFormByClassName这是BPL中的一个函数,提供个思路参考下。你可以参考:关于一个项目的总结 ( EXE+BPL+DLL 模式)
    http://www.cnblogs.com/long6/articles/2098182.html我的做法就类似于这个。
      

  3.   

    可以动态调用dll,找找LoadLibrary,GetProcAddress,FreeLibrary这3个函数用法吧,
    还有就是不同的dll之间共享数据是如何实现的
      

  4.   

    Visible := False;//隐藏主窗口,把这个直接改成Form1.Free;
    Visible := true;//Application.CreateForm(TForm1, Form1);
      Form1.Show();改成这样就可以了但如果要实现纯DLL的话,DLL间参数传递等,这点我也还不怎么清楚