Hola, voy a trabajar con la función GetFileVersionInfo de la API de Windows, la cual sirve para obtener datos de un archivo ejecutable, como su versión, fabricante, etcétera.
En la unidad SysUtils de Delphi viene una rutina que hace uso de ella (también he visto varias clases de terceros que la implementan):
Código Delphi
[-]function GetFileVersion(const AFileName: string): Cardinal;
var
FileName: string;
InfoSize, Wnd: DWORD;
VerBuf: Pointer;
FI: PVSFixedFileInfo;
VerSize: DWORD;
begin
Result := Cardinal(-1);
FileName := AFileName;
UniqueString(FileName);
InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
if InfoSize <> 0 then
begin
GetMem(VerBuf, InfoSize);
try
if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
if VerQueryValue(VerBuf, '\', Pointer(FI), VerSize) then
Result:= FI.dwFileVersionMS;
finally
FreeMem(VerBuf);
end;
end;
end;
Lo que me llama la atención es esa afirmación de "
GetFileVersionInfo modifies the filename parameter". Entiendo y encuentro lógico que debido a ello Borland usara una cadena alterna "UniqueString(FileName)".
Pero al hacer pruebas no encontré que GetFileVersionInfo realmente modificara el valor del primer argumento. Así que mi duda es por qué se tiene esa precaución y, asumiendo que la afirmación del comentario es cierta, ¿en qué circunstancias ocurre tal modificación?
Esta vez no tuve suerte en Google, ¿alguna pista?
Gracias de antemano.