![]() |
|
|
Регистрация | << Правила форума >> | 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 '); APPLICATION.TERMINATOR Последний раз редактировалось Ama, 09.09.2010 в 22:25. |