Ich schreibe mir gerade eine
DLL in der ich in einem Ordner den ich mit PChar übergebe alle Dateien mit einer bestimmten Endung zurückgeben möchte, wenn ich sie per PChar mit Trennzeichen zurückgebe dann bekomme ich Fehlermeldungen und verfälschte Ergebnisse.
Ich denke das es was damit zutun hat das das PChar nicht mehr existiert und ich auf eine Speicherleiche zugreife.
Frage wie mach ich es Richtig?
Meine
DLL Funktion (Datei suchen liefert einen String zuruck):
Delphi-Quellcode:
function Datei_suchen(PF_VZ_Quelle:PChar;PF_NA_Suchen:PChar;PF_ED_Suchen:PChar;PF_Aelteste:Boolean;PF_Neuste:Boolean;PF_Alle:Boolean):PChar; stdcall;
begin
Result := PChar(DA_Datei_suchen(PF_VZ_Quelle,PF_NA_Suchen,PF_ED_Suchen,PF_Aelteste,PF_Neuste,PF_Alle));
end;
Meine Programm:
Delphi-Quellcode:
function SYS_Datei_suchen(PF_VZ_Quelle:String;PF_NA_Datei:String;PF_ED_Datei:String;PF_Aelteste:Boolean;PF_Neuste:Boolean;PF_Alle:Boolean):AnsiString;
// function Datei_suchen(PF_VZ_Quelle:PChar;PF_NA_Suchen:PChar;PF_ED_Suchen:PChar;PF_Aelteste:Boolean;PF_Neuste:Boolean;PF_Alle:Boolean):PChar; stdcall;
type
TDLL_Datei_suchen = function(PF_VZ_Quelle:PChar;PF_NA_Suchen:PChar;PF_ED_Suchen:PChar;PF_Aelteste:Boolean;PF_Neuste:Boolean;PF_Alle:Boolean):PChar; stdcall;
var
PF_Handle : Integer;
PF_DLL_Datei_suchen : TDLL_Datei_suchen;
begin
Result := '';
PF_Handle := LoadLibrary(PChar(ExtractFilePath(Application.ExeName)+'MSWin.dll'));
if PF_Handle <> 0 then
begin
@PF_DLL_Datei_suchen := GetProcAddress(PF_Handle,'Datei_suchen');
if @PF_DLL_Datei_suchen <> nil then
begin
Result := PF_DLL_Datei_suchen(PChar(PF_VZ_Quelle),PChar(PF_NA_Datei),PChar(PF_ED_Datei),PF_Aelteste,PF_Neuste,PF_Alle);
end;
end;
FreeLibrary(PF_Handle);
end;