Hallo.
Wir nutzen das PDFToolkit der Firma
Gnostice.
Folgendes Problem hat sich nun aufgetan:
Ich binde die benötigten Sourcen über den Uses-Abschnitt meiner
DLL ein.
Ich lade die
DLL mit LoadLibrary -> OK.
Ich entlade die
DLL mit FreeLibrary -> die Applikation hängt sich auf.
Die Sourcen müssen nicht einmal benutzt werden; es genügt vollkommen, sie in den Uses-Abschnitt einzufügen, und schon hängt es bei FreeLibrary. Kommentiere ich besagte Units aus, funktioniert das Entladen wie erwartet.
DLL
Delphi-Quellcode:
library TestDLL;
Uses
SysUtils,
Classes,
gtPDFCrypt,
gtClasses,
gtCstPDFDoc,
gtExPDFDoc,
gtExProPDFDoc,
gtPDFDoc,
gtPDFViewer,
gtUtils;
{$R *.res}
Begin
End.
Applikation
Delphi-Quellcode:
Unit Unit1;
Interface
Uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls;
Type
TForm1 =
Class(TForm)
Button1: TButton;
Button2: TButton;
Procedure Button1Click(Sender: TObject);
Procedure Button2Click(Sender: TObject);
private
FDLLHandle: Integer;
End;
Var
Form1: TForm1;
Const
DLL_NAME = '
TestDLL.dll';
Implementation
{$R *.dfm}
Function LoadDLL(aFileName:
String): Integer;
Begin
Result := 0;
If FileExists(aFileName)
Then
Result := LoadLibrary(Pchar(aFileName))
Else
ShowMessage(Format('
DLL does not exist! (%s)', [aFileName]));
End;
Function UnloadDLL(iHandle: Integer): Boolean;
Begin
Result := False;
If iHandle <> 0
Then
Result := FreeLibrary(iHandle);
//<-- hier hängt es
End;
Procedure TForm1.Button1Click(Sender: TObject);
Begin
FDLLHandle := LoadDLL(DLL_NAME);
If FDLLHandle <> 0
Then
ShowMessage(Format('
DLL %s successfully loaded. Handle = %d', [QuotedStr(DLL_NAME), FDLLHandle]));
End;
Procedure TForm1.Button2Click(Sender: TObject);
Begin
If UnloadDLL(FDLLHandle)
Then
ShowMessage('
DLL unloaded')
Else
ShowMessage('
DLL not unloaded');
End;
End.
Verstehe nicht, wo da das Problem liegt und hoffe, dass jemand Rat weiß.
Danke.
Gruß