function Tfrmlgn.login(name,psw:string):boolean;
   begin
      {lgn.Connection:=conn; }
      lgn.Close;
      lgn.SQL.Clear ;  
      lgn.sql.Text:='select username,password from usertbl where username=:name and password=:psw ';
      lgn.Parameters.ParamValues['name']:=name;
      lgn.Parameters.ParamValues['psw']:=psw;
      if lgn.ExecSQL<>0 then
       result:=true
       else
          result:=false;
   end;
procedure Tfrmlgn.BitBtn1Click(Sender: TObject);
var
  qlgn:tadoquery;
begin
  qlgn:=tadoquery.create(self);
 try
if login(user.Text,psw.Text) then
 begin
       messagebox(application.handle,'密码不正确!','警告',mb_Iconinformation);
       psw.Text:='';
     psw.SetFocus;
  end
   else begin
        frmsplash.close;
        frmlgn.close;
        end;
   finally
    qlgn.Close;
    end;
end;
Error:
  access vioaltion at address 0031d95 in module 'prg.dll' read of address 000002f4

解决方案 »

  1.   

    dll 中的lgn 那来的,没有创建阿??

    qlgn:tadoquery;
    移到dll中就可
    注意在代码最前用
    uses Activex;function Tfrmlgn.login(name,psw:string):boolean;
    begin
      CoInitialize(nil);
      ...  CoUninitialize;
    end;
      

  2.   

    我是这样做的,在DLL中不是有一个FORM吗,上面的代码都是那个form里的面的!
    我按你说的那样做还是不行,我发现只要密码不正确显示messagebox,正确时发生错误
    Tfrmlgn.BitBtn1Click 是DLL中frmlgn中的ok按钮的click 事件吗?
    这位大哥请多指教!!!!!!!!!!
      

  3.   

    frmsplash.close; //frmsplash 建立了吗?可能是因为它出错的。
      

  4.   

    frmsplash 建立可能是因为它出错的。能正确显示!