![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем привет. Проблема в следующем. Есть библиотека 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;Вообщем вылазить ошибка где указал и там написано access violation at address 00000000. Read of address 0000000. Вообщем почему то не вызывается процедура showlogindialog, экспортируемая из DLL. Что это может быть я не знаю. Будьте добры помогите!!! Последний раз редактировалось Admin, 09.09.2010 в 09:59. |
|
#2
|
|||
|
|||
|
А трассировал саму dll? . а в основном модуле строка:
Код:
Showlogindialog:=TshowloginDialog(G etProcAddress(hLib,'SHOWLOGINDIALOG ')); Код:
@Showlogindialog:=GetProcAddress(hLib,'SHOWLOGINDIALOG '); Последний раз редактировалось Ama, 09.09.2010 в 22:25. |