1).动态连接库中,主程序与DLL如何共享连接?
  如果使用共用连接字符串的方式,哪每个DLL连接时都要与数据库进行一次连接吗?如果是哪就非常耗费资源了。
2).在各个DLL中如何处理全局变量?
3).每个DLL中都建立窗体,而为了保持界面的一致性,需要继承一个父窗体,如何做到使该父窗体共享给每个DLL中的Form使用,且更改父窗体所有DLL中的窗体也更着变动。

解决方案 »

  1.   

    我来帮你吧:)TShowAbcdEnter = function (AHandle: THandle;PassAdoc:String;PassUser:String): BOOL; StdCall;var
     LibHandle: THandle;
     ShowAbcdEnter: TShowAbcdEnter;
    begin
      LibHandle := LoadLibrary('Dll\AbcdEnterDll.dll');
      try
        if LibHandle = 0 then
          raise EDLLLoadError.Create('无法成功装入资源文件,请检查');
        @ShowAbcdEnter := GetProcAddress(LibHandle,'ShowAbcdEnter');
        if not (@ShowAbcdEnter = nil) then
          Begin
            ShowAbcdEnter(Application.Handle,AaaForm.Adocca,AaaForm.SyUser);
          End
        else
          RaiseLastWin32Error;
      finally
        FreeLibrary(LibHandle);
      end;uses
      ShareMem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,ActiveX, StdCtrls, ExtCtrls, Buttons, ComCtrls,Jpeg, DB, ADODB, ExtDlgs;
    function ShowAbcdEnter(AHandle: THandle; PassAdoc: String; PassUser: String):BOOL; StdCall;
    var
     AbcdEnterForm : TAbcdEnterForm;
    begin
     Application.Handle := AHandle;
     AbcdEnterForm := TAbcdEnterForm.Create(Application);
     try
       AbcdEnterForm.Adoc.Connected:=False;
       AbcdEnterForm.ADOC.ConnectionString:=PassAdoc;
       AbcdEnterForm.ADOC.Connected:=True;
       AbcdEnterForm.Edit2.Text:= PassUser;
       AbcdEnterForm.ShowModal;
       Result := False;
     finally
       AbcdEnterForm.Free;
     end;
    End;
      

  2.   

    huojiehai(海天子):可否详细说明
      

  3.   

    可否用BPL来实现我的想法?各位大侠讨论一下·
      

  4.   

    每人知道吗,第一个问题我已经用package解决了。各位帮帮忙把