Thema: Delphi Abstutz nach DLL zugriff

Einzelnen Beitrag anzeigen

Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#1

Abstutz nach DLL zugriff

  Alt 2. Mai 2006, 03:20
Ich muss etwas Code (Compiliert ~150KB) in eine DLL auslagern. Um die restlichen Exen der Projektes kleiner zuhalten bzw um Programm-Teile zur Laufzeit austauschen zukönnen ohne das das Hauptprogramm beendet werden muss. Sowei funtz das Ganze auch nur bei FreeLibrary(DLLHandle) schmiert das ganze Programm ab, in der Art das es einfach mit einer AV beendet (Prog hängt sich nicht auf sondern schliesst sich).

Das Hauptprogramm
Delphi-Quellcode:
procedure OpenFile2HashDll(ADllFilename: String; APath: String; AFileList: TStringList);
var
  FileListForHash : TFileListForHash;
  FuncPtr : TFarProc;
  DLLHandle : THandle;
begin
  DLLHandle := LoadLibrary( PChar(ADllFilename) );
  FuncPtr := GetProcAddress(DLLHandle, 'FileListForHash');

  if FuncPtr <> nil then begin
    @FileListForHash := FuncPtr;
    FileListForHash(APath, AFileList);
    FuncPtr := nil;
    end;

  FreeLibrary(DLLHandle); // Hier knalls -> Programm-Ende! Auch ein Try-Except-Block hilft nicht.
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TSTringList.Create;

  OpenFile2HashDll('.\F2H32.dll', ExtractFilePath(ParamStr(0)) + '*.*', sl);

  sl.SaveToFile('.\test.txt'); // hier komme ich schon gar nicht mehr vorbei :-(
  sl.Free;
end;
Die DLL
Delphi-Quellcode:
procedure FileListForHash(APath: String; AFileList: TStringList); Export;
var
  I: Integer;
  slTmp: TStringList;
begin
  slTmp := TStringList.Create;

  GetAllFiles(APath, slTmp); // alle dateien suchen, in slTmp schreiben

  for I := 0 to slTmp.Count-1 do // und alle gefunden hashen
    AFileList.Add( slTmp.Strings[I] + '|' + IntToStr(GetFileSize(slTmp.Strings[I])) + '|' + GetHash(slTmp.Strings[I]) );

  slTmp.Free;

  // und die AFileList wieder zurück in das Hauptprogramm
end;

exports
    FileListForHash;
Hat jemand eine Idee??
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat