tengo el siguiente procedimiento que saque de un programa que lo que hace es escribir un buffer de datos como recursos en otro fichero, aver si alguien me aclara las dudas plz
el procedimiento es el siguiente:
Código Delphi
[-]
procedure WriteResData(ServerFile: string; Buffer: Pointer; Size: Integer; ResourceName: string);
var
ResourceHandle: THandle;
WideServerFile: PWideChar;
WideResourceName: PWideChar;
begin
GetMem(WideServerFile, (Length(ServerFile) + 1) * 2);
GetMem(WideResourceName, (Length(ResourceName) + 1) * 2);
try
StringToWideChar(ServerFile, WideServerFile, Length(ServerFile) * 2);
StringToWideChar(ResourceName, WideResourceName, Length(ResourceName) * 2);
ResourceHandle := BeginUpdateResourceW(WideServerFile, False);
UpdateResourceW(ResourceHandle, MakeIntResourceW(10), WideResourceName, 0, Buffer, Size);
EndUpdateResourceW(ResourceHandle, False);
except
FreeMem(WideServerFile);
FreeMem(WideResourceName);
end;
end;
1-por que se usan variables PWideChar, que son? y que diferencias hay entre los PChar por que no usar estos?
2- las funciones de las API que veo terminan en W, por lo que las Ansi ya quedaron obsoletas o que?
3- Como se sabe cuando usar cierta conbinacion de funciones API, ahi veo que usa 3:
1-BeginUpdateResourceW
2-UpdateResourceW
3-EndUpdateResourceW
a lo que me refiero es a por que las usa en ese orden?
3-
GetMem(WideServerFile, (Length(ServerFile) + 1) * 2);
la memoria que reserva para WideServerFile es = a (longitud + 1) * 2 vaya formula!! a que se debe ese + 1 y *2 (ya se que es la multiplicacion es para reservar el doble de Chars pero por que?
4- Veo un Bug ahi en vez de liberar los recursos con finally, solo los libera si ocurre algun error, con except, que tonto, este no hace falta explicarlo.
Bueno si alguien tiene tiempo y puede espero me resuelva estas dudas.
Grax y Chau-