第一:不可以的,因为每一个EXE在调用一个DLL时,DLL中全局变量是每个程序都有一套的。
第二:用同一个用户登录的窗口来验证是可以的,但其它程序还是不可以共享这个连接的。

解决方案 »

  1.   

    登录时,exe程序在调用创建登录窗口的dll后,如果知道在登录窗口按下了登录的按纽?(按下后才能验证密码呀)
      

  2.   

    你做成三层的好了,三个EXE作为客户端,通过中间层连接数据库
      

  3.   

    access好象是不能做三层的吧,单机上也没这必要。
    登录的问题,也可以在每个程序登录时,在某一文件(注册表、数据库的字段中)+1,三个程序都打开时最大为3,而当这个值>=1时,就不需要登录,但要给这个值加1,反之则要登录;而在关闭每一个程序时,绘这个值-1.
      

  4.   

    登陆的问题
    我认为最好做个记号
    我的意思是如果登陆了某一个exe
    那么在一个文本或者注册表写入
    当然别的开始时先判断注册表
    这样就可以使几个程序受限制
      

  5.   

    差不多就是这个意思了,dll 的问题我也不清楚,还是让其他人来看看吧。
      

  6.   

    登录时,exe程序在调用创建登录窗口的dll后,如果知道在登录窗口按下了登录的按纽?(按下后才能验证密码呀)谁能给我一个demo?愿意出300分!
      

  7.   

    我这有一个ADO。DLL,
    首先,不要用BORLAND的,
    最好用MS的导一个adodb_tlb,
    如DLL中做登录窗口的,不太大了么,
    在程序中做不是更好,
    然后用DLL中的DB_OPEN
    这样,你也可以做到第二点了,只是看看有没有这三个程序在运行么!
    在dll中一打开,可同时开它个32个连接
    这样不就OK了,?我这个ADO。DLL做是做了,不过是用在别的方面了,
    没有节省什么,反而更。。如真给300分,可以发给你3次,
    呵呵,
    我的Email :[email protected]
    你可以要嘛,说明要ADO。DLL源代码就行,
      

  8.   

    library Project2;uses
      SysUtils,
      Classes,
      Unit2 in 'Unit2.PAS' {Form3};{$R *.res}
    exports
      DoTest;
    beginend.
    ----------------------------------- 
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;type
      TForm3 = class(TForm)
        ADOConnection1: TADOConnection;
        Memo1: TMemo;
      private
        { Private declarations }
      public
        { Public declarations }
      end;procedure DoTest(H: THandle; { 传递句柄       }
      AConn: TADOConnection; { 传递数据库连接 }
      S: string; { 传递文本信息   }
      N: Integer); { 传递数值信息   }
    cdecl; { 指定调用协议   }var
      form3 : Tform3;implementation{$R *.DFM}procedure DoTest(H: THandle; AConn: TADOConnection; S: string; N: Integer);
    begin
      Application.Handle := H; { 将过程的句柄赋值为调用者的句柄 }
      { 上面语句的作用在于, DLL的句柄和调用者的句柄相同,在任务栏中就不会   }
      { 各自出现一个任务标题了。 }
      form3 := TForm3.Create(Application);
      with form3 do
      try { 创建窗体                       }
        Memo1.Lines.Append('成功调用'); { 显示一行信息                   }
        ADOConnection1 := AConn; { 获得数据库连接的实例           }
        Memo1.Lines.Append(
          ADOConnection1.ConnectionString +
          ' - ' + S + ' - ' + IntToStr(N)); { 根据得到的参数显示另一行信息   }
       update;
       ShowModal;                          { 模式化显示窗体                 }
      finally
        Free; { 调用结束时销毁窗口             }
      end;
    end;end.
    -----------------------------------------------
    以下为调用文件
    ........
    var
      Form1: TForm1;implementation{$R *.dfm}procedure DoTest(H: THandle; { 传递句柄       }
      AConn: TADOConnection; { 传递数据库连接 }
      S: string; { 传递文本信息   }
      N: Integer); { 传递数值信息   }
    cdecl; { 指定调用协议   }
    external 'Project2.dll'; { 指定过程来源   }{ 调用过程 }procedure TForm1.Button1Click(Sender: TObject);
    begin
      DoTest(Application.Handle,
        ADOConnection1,
        'Call OK',
        256);
    end;end.