Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка выгрузки DLL [D6, Win2k]


Страницы:   1 2

Dynamit ©   (2002-09-16 14:45:00) 

Уважаемые мастера, у меня странный трабл! Собственно сабж.
Делаю простейшие вещи с DLL. Все получается, но при выгрузке происходит ошибка обращения к памяти (т.е. обьект воздействия не существует!?!).
Если есть какие мысли - подскажите сирому, не пожалейте времени ;(

Исходник вот:

unit Unit1;

interface

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

type

TLoadJorn = Function (AHandle, FHandle: THandle):Longint; StdCall;
TUnLoadJorn = Procedure (ARef: LongInt); StdCall;

EDLLLoadError=class(Exception);

TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
LibHandle: THandle;
CurHndl: LongInt;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var
LoadJorn: TLoadJorn;
begin
LibHandle:=LoadLibrary("JornDLL.Dll");
If LibHandle=0 Then
Raise EDLLLoadError.Create("Не могу загрузить DLL");
@LoadJorn:=GetProcAddress(LibHandle,"LoadJorn");
If Not (@LoadJorn=nil) Then
CurHndl:=LoadJorn(Handle, Panel1.Handle);
end;

procedure TForm1.Button2Click(Sender: TObject);
Var
UnLoadJorn: TUnLoadJorn;
begin
If LibHandle<>0 Then
Begin
@UnloadJorn:=GetProcAddress(LibHandle,"UnLoadJorn");
If Not (@UnloadJorn=nil) Then
Begin
UnloadJorn(CurHndl);
End;
If Not FreeLibrary(LibHandle)Then
Begin
ShowMessage("Error "+IntToStr(GetLastError));
End;
End;
end;

end.


Dynamit   (2002-09-16 16:44:00) [21]

Ресурсы проверил - вроде было местечко слабое (усилил)!
Но ошибка осталась!!

Буду пробовать упрощать DLL - посмотрю в чем глюк.


REA   (2002-09-16 16:33:00) [22]

Еще параллельные threads могут завесить


Dynamit   (2002-09-16 15:11:00) [23]

Да там до проверки дело не доходит - виснет где-то внутри FreeLibrary. Может и правда с ресурсами...


ZrenBy   (2002-09-16 15:02:00) [24]

А не пробовал
If FreeLibrary(LibHandle)=0 Then

В дельфи работа с Bool сделана очень дерьмово


Andre V.   (2002-09-16 14:56:00) [25]

Возможно, UnloadJorn не освобождает ресурсы из DLL


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо