Всем привет. Проблема в следующем. Есть библиотека Login.dll, которая вызывает открытие формы ввода пароля и юзернэйма. Вообщем вот...
Код:
library LOGIN;
uses
SysUtils,
Classes,
uLogin in 'uLogin.pas' {fLogin},
uLoginData in '..\common\uLoginData.pas';
{$R *.res}
exports
ShowLoginDialog name ' ShowLoginDialog';
begin
end.
Далее...сама ShowLoginDialog
unit uLogin;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,uLoginData;
type
TfLogin = class(TForm)
Label1: TLabel;
Label2: TLabel;
ebUserName: TEdit;
ebPassword: TEdit;
btnOK: TButton;
btnCancel: TButton;
procedure FormShow(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
LoginData: TLoginData;
end;
procedure ShowLoginDialog(Handle: Thandle; p: pointer);
var
fLogin: TfLogin;
implementation
{$R *.dfm}
procedure ShowLoginDialog(Handle: Thandle; p: pointer);
Begin
Application.Handle:= Handle;
fLogin:=Tflogin.Create(Application) ;
flogin.LoginData:=TLoginData(p);
fLogin.ShowModal;
fLogin.Free;
End;
procedure TfLogin.FormShow(Sender: TObject);
begin
ebPassword.Text:='';
end;
procedure TfLogin.btnOKClick(Sender: TObject);
begin
LoginData.user_id:=ebUserName.Text;
LoginData.password:=ebPassword.Text ;
LoginData.Modalresult:=mrOk;
end;
procedure TfLogin.btnCancelClick(Sender: TObject);
begin
LoginData.Modalresult:=mrCancel;
end;
end.
И непосредственно сам код главного модуля...
procedure TfMain.soed1Click(Sender: TObject);
type TShowLoginDialog=procedure(Handle:T Handle; pointer );
var
hLib: Thandle;
Showlogindialog: TshowloginDialog;
Logindata:Tlogindata;
begin
HLib:=LoadLibrary('Login.DLL');
if hlib<32 then
Begin
Showmessage('отсутствует библиотека login.dll');
exit;
End;
LoginData:=TloginData.create;
Showlogindialog:=TshowloginDialog(G etProcAddress(hLib,'SHOWLOGINDIALOG '));
Showlogindialog(Application.Handle, LoginData);//ВОТ ЗДЕСЬ ОШИБКА!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!
Freelibrary(hLib);
if LoginData.modalresult=mrOk then
Begin
try
with fDM.DataBase1 do
Begin
if Connected then Close;
LoginPrompt:=false;
Params.Values['Password']:=Trim(LoginData.password);
Params.Values['User name']:=Trim(LoginData.user_id);
Open;
End;
Statusbar1.simpletext:='Yes';
except
Statusbar1.simpletext:='No';
End;
End;
end;
Admin: Пользуемся тегами!
Вообщем вылазить ошибка где указал и там написано access violation at address 00000000. Read of address 0000000. Вообщем почему то не вызывается процедура showlogindialog, экспортируемая из DLL.
Что это может быть я не знаю. Будьте добры помогите!!!