![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка выгрузки DLL [D6, Win2k]
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