Ver Mensaje Individual
  #1  
Antiguo 04-03-2008
jw4v32 jw4v32 is offline
Registrado
 
Registrado: feb 2008
Posts: 8
Reputación: 0
jw4v32 Va por buen camino
funcion para escribir recursos (como?)

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-


Responder Con Cita