1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| library Commun;
{ Remarque importante concernant la gestion de mémoire de DLL : ShareMem doit
être la première unité de la clause USES de votre bibliothèque ET de votre projet
(sélectionnez Projet-Voir source) si votre DLL exporte des procédures ou des
fonctions qui passent des chaînes en tant que paramètres ou résultats de fonction.
Cela s'applique à toutes les chaînes passées de et vers votre DLL --même celles
qui sont imbriquées dans des enregistrements et classes. ShareMem est l'unité
d'interface pour le gestionnaire de mémoire partagée BORLNDMM.DLL, qui doit
être déployé avec vos DLL. Pour éviter d'utiliser BORLNDMM.DLL, passez les
informations de chaînes avec des paramètres PChar ou ShortString. }
uses
ShareMem,
SysUtils,
Classes,
Windows,
Dialogs,
Forms,
ShlObj,
ActiveX,
Controls,
Registry,
Graphics,
Math;
Var
BtnDown: boolean;
{$R *.res}
procedure GetFileInfo(const FileName: string;liste: TStringList);register;
const
VersionInfo: array [1..8] of string
= ('FileDescription', 'CompanyName' , 'FileVersion',
'InternalName' , 'LegalCopyRight', 'OriginalFileName',
'ProductName' , 'ProductVersion');
VersionInfoFr: array [1..8] of string
= ('Description', 'Entreprise' , 'Version : ',
'' , 'Marque Légale', 'Nom du fichier d''origine',
'' , 'Version du produit');
var
Handle : DWord;
Info : Pointer;
InfoData : Pointer;
InfoSize : LongInt;
DataLen : UInt;
LangPtr : Pointer;
InfoType : string;
i : integer;
begin
{ Demande de la taille nécessaire pour stocker les infos de Version}
InfoSize:=GetFileVersionInfoSize(PChar(FileName), Handle);
if (InfoSize > 0) then
begin
{ Réservation de la mémoire nécessaire}
GetMem(Info, InfoSize);
try
if GetFileVersionInfo(PChar(FileName), Handle, InfoSize, Info) then
begin
for i:= 1 to 8 do
begin
InfoType := VersionInfo[i];
if VerQueryValue(Info,'\VarFileInfo\Translation',LangPtr, DataLen) then
InfoType:=Format('\StringFileInfo\%0.4x%0.4x\%s'#0,[LoWord(LongInt(LangPtr^)),
HiWord(LongInt(LangPtr^)), InfoType]);
if VerQueryValue(Info,@InfoType[1],InfoData,Datalen) then
liste.add(VersionInfoFr[i]+strPas(Pchar(InfoData)));
end;
end;
finally
FreeMem(Info, InfoSize);
end;
end;
end;
Exports
GetFileInfo;
begin
end. |
Partager