Pour mon programme concernant l'analyse d'un programme Panoramic (voir ici), j'ai eu besoin de connaitre la date et l'heure de modification d'un fichier. Comme il n'existe pas de commande panoramic pour réaliser cela, j'ai fait une petite DLL qui contient juste cette fonction.
' ------------------------------------------------------------------------------- ' Exemple: pour connaitre la date de la dernière édition du fichier exemple.bas ' ------------------------------------------------------------------------------- dim Fichier$, DateFichier$,DateLength%,retourDLL% Fichier$ = "exemple.bas" : ' nom du fichier à tester DateFichier$ = string$(25," ") : ' on réserve de la place pour que la dll puisse écrire la date DateLength% = len(DateFichier$) : ' on indique la place réservée dll_on "DateFile.dll" retourDLL% = dll_call3("DateFichier", adr(Fichier$), adr(DateFichier$), DateLength%) dll_off message "La date du fichier "+Fichier$+" est :"+DateFichier$ end
La Dll compilée se trouve ici : datefile.dll
(Comme je ne maitrise pas Delphi, les commentaires pour améliorer le source sont les bienvenus. )
library DateFile; uses SysUtils, Windows, StrUtils, Forms, Dialogs, Classes; {$R *.res} function DateFichier(AdrFileName,AdrStrRetour,LongStrRetour:integer):integer;stdcall; var pstr:pstring; FileName: widestring; FileDate: integer; myDate: TDateTime; DateStr:string; PtrSrc:pchar; PtrDest:pbyte; i,longTransfert:integer; begin // on récupère le nom du fichier pstr := pstring(AdrFileName); FileName := pstr^; FileDate := FileAge(FileName); // puis sa date myDate := FileDateToDateTime(FileDate); // on converti la date dans un autre format DateStr := FormatDateTime('c',myDate); PtrDest := Pbyte(pstring(AdrStrRetour)^); longTransfert := length(DateStr); if longTransfert > LongStrRetour then longTransfert:=LongStrRetour; for i:=1 to longTransfert do begin PtrSrc :=pchar(midstr(DateStr,i,1)); PtrDest^ := Byte(PtrSrc^); inc(PtrDest); end; result:=0 end; exports DateFichier; begin end.
Merci à Klaus et DJ Peters !!!