Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2010, 08:47   #1
Mega_lamerok
 
Регистрация: 09.04.2009
Сообщений: 3
По умолчанию Загрузка процедуры из DLL - ошибка.

Всем привет. Проблема в следующем. Есть библиотека 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.

И непосредственно сам код главного модуля...
[DELPHI]
procedure TfMain.soed1Click(Sender: TObject);
type TShowLoginDialog=procedure(Handle:THandle; p: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(GetProcAddress(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.
Что это может быть я не знаю. Будьте добры помогите!!!

Последний раз редактировалось Stilet; 09.09.2010 в 09:08.
Mega_lamerok вне форума Ответить с цитированием
Старый 09.09.2010, 09:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Веселый ты человек )
Код процедуры обязан быть в модуле библиотеки.
т.е. по хорошему:
Код:
library LOGIN;
uses
  SysUtils,
  Classes,
  uLogin in 'uLogin.pas' {fLogin},
  uLoginData in '..\common\uLoginData.pas';

 procedure ShowLoginDialog(Handle: Thandle; p: pointer);
Begin
 Application.Handle:= Handle;
 fLogin:=Tflogin.Create(Application);
 flogin.LoginData:=TLoginData(p);
 fLogin.ShowModal;
 fLogin.Free;
End;

exports
 ShowLoginDialog name ' ShowLoginDialog';

begin
end.
А в основной программе ему делать нечего.
Но исходя из твоей задачи тебя ждут грабли при работе с формами.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.09.2010, 09:21   #3
Mega_lamerok
 
Регистрация: 09.04.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А в основной программе ему делать нечего.
Но исходя из твоей задачи тебя ждут грабли при работе с формами.
попробовал тоже самое(((
И какие грабли меня ждут если не секрет?
Mega_lamerok вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[DLL] Загрузка и выгрузка dll в/из чужого процесса Человек_Борща Win Api 4 28.02.2010 17:47
Загрузка dll Колючка* Общие вопросы Delphi 3 12.02.2010 19:45
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
загрузка .dll blackstersl Общие вопросы Delphi 1 29.04.2009 21:53
Загрузка DLL Hollander Общие вопросы Delphi 3 21.05.2007 20:19