![]() |
Abstutz nach DLL zugriff
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
Delphi-Quellcode:
schmiert das ganze Programm ab, in der Art das es einfach mit einer AV beendet (Prog hängt sich nicht auf sondern schliesst sich).
FreeLibrary(DLLHandle)
Das Hauptprogramm
Delphi-Quellcode:
Die DLL
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;
Delphi-Quellcode:
Hat jemand eine Idee??
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; |
Re: Abstutz nach DLL zugriff
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.
|
Re: Abstutz nach DLL zugriff
Morgen Sir!
Habe ich gelesen und die ShareMem eingebunden. |
Re: Abstutz nach DLL zugriff
Schon mal diesen Konstrukt für dynamischen DLL-Zugriff versucht?
Delphi-Quellcode:
Toni
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; |
Re: Abstutz nach DLL zugriff
Hat leider auch nicht geklappt.
Habe die DLL etwas umgebaut - Viele Wege führen nach Rom :lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz