AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abstutz nach DLL zugriff

Ein Thema von Harry M. · begonnen am 2. Mai 2006 · letzter Beitrag vom 4. Mai 2006
Antwort Antwort
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, 04: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
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Abstutz nach DLL zugriff

  Alt 2. Mai 2006, 06:06
hast du im DLL-Projekt den Text gelesen der ganz oben steht? Wenn du zwischen DLL und Hauptprogramm mit Strings hantierst solltest du dir den Text mal in Ruhe durchlesen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

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

Re: Abstutz nach DLL zugriff

  Alt 2. Mai 2006, 08:45
Morgen Sir!

Habe ich gelesen und die ShareMem eingebunden.
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#4

Re: Abstutz nach DLL zugriff

  Alt 2. Mai 2006, 09:10
Schon mal diesen Konstrukt für dynamischen DLL-Zugriff versucht?

Delphi-Quellcode:
type
  Tfunc = function(Bla: String): Integer;

function CallFunc(sowiso: String):Integer;
var func: Tfunc ;
    Handle: THandle;
    filepath: string;
    DefResult: integer;
begin
  DefResult:=0;
  filepath:=ExtractFilePath(ParamStr(0))+ProgramFiles.Path;
  Handle:=LoadLibrary(@filepath[1]);
  if Handle <> 0 then
  begin
    @func:= GetProcAddress(Handle, 'MyDLLFunc');
    if @func <> nil then
    begin
      DefResult:=func(Gruppen, Fahrer, Abteilung, Modus);
    end;
    FreeLibrary(Handle);
  end;
  Result:=DafResult;
end;
Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

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

Re: Abstutz nach DLL zugriff

  Alt 4. Mai 2006, 03:55
Hat leider auch nicht geklappt.
Habe die DLL etwas umgebaut - Viele Wege führen nach Rom
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz