Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Ошибка при закрытии dll
 
Всем привет! В программе реализована динамическая загрузка dll. После конца процедуры(end) вылезает ошибка. Вопрос: в чем дело? Если не исправить, то как можно отключить вывод об ошибке?
dll:
Код
library dll;
uses
  SysUtils, Classes, Messages, Dialogs;
{$R *.res}
function ErrorMessage: String; stdcall;
begin
  MessageDlg('About', mtInformation, [mbOK],0);
end;
exports ErrorMessage;
  begin
  end.


форма:
Код
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation


{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
type
  TMyFunc = procedure;
var
  DLLInstance  : THandle;
begin
  DLLInstance := LoadLibrary(PChar('dll.dll'));
  if (DLLInstance = 0) then begin
  MessageDlg('Невозможно загрузить DLL', mtError, [mbOK], 0);
  Application.Terminate;
  end
  else
  FreeLibrary(DLLInstance);
end;
procedure TForm1.Button1Click(Sender: TObject);
type
  TMyFunc = procedure;
var
  ErrorMessage: TMyFunc;
  DLLInstance  : THandle;
begin
  DLLInstance := LoadLibrary(PChar('dll.dll'));
  @ErrorMessage := GetProcAddress(DLLInstance, 'ErrorMessage');
  ErrorMessage( );
  FreeLibrary(DLLInstance);
  ShowMessage('Test');
  end;
end.

После ShowMessage вылезает ошибка, но программа продолжает работать.
Изменено: Dominator - 27.05.2011 17:22:04
 
Пытался в implementation загнать(не динамическая загрузка)
Код
implementation
procedure ErrorMessage( ); stdcall; external 'dll.dll' name
'ErrorMessage';

и в procedure TForm1.Button1Click(Sender: TObject);
делал
Код
ErrorMessage( );


Одинаковый результат
 
Пытался в implementation загнать(не динамическая загрузка)

Код
implementation

procedure ErrorMessage( ); stdcall; external 'dll.dll' name 'ErrorMessage';


и в procedure TForm1.Button1Click(Sender: TObject);

делал

Код
ErrorMessage( );


Одинаковый результат
Изменено: Dominator - 27.05.2011 17:37:34
 
Мда уж... матчасть учите.. Uses Sharemem в оба проекта, самым первым модулем, причем в ЕХЕ в .dpr файле, в среде чарез меню Project->Wiev source. И не забудте, теперь у вас в проекте чтобы все работало нужно чтобы в каталоге с программой лежала и borlandmm.dll.

P.S. Delphikingdom.com и в поиске статей -> строки и работа с ними, строки и DLL. Удачи.
 
Опс сори.... ну предыдущий пос все равно правильный, и все равно учите матчасть.... только в королевстве ищите создание объектов в DLL...
 
Спасибо большое! На сайт обязательно загляну.
Страницы: 1
Читают тему