Einzelnen Beitrag anzeigen

worker
(Gast)

n/a Beiträge
 
#1

Gnostice PDFToolkit in DLL - FreeLibrary hängt

  Alt 23. Okt 2007, 08:44
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ß
  Mit Zitat antworten Zitat