Ver Mensaje Individual
  #2  
Antiguo 30-01-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Reputación: 20
cHackAll Va por buen camino
A primera vista te ha fallado la definición del tipo de datos de TSetting, las APIs que utilizas funcionan con punteros, y tu estas haciendo una declaracion de un puntero de un string, pero el string array de caracteres convencional, tiene un indicador del "Length".

Aparte noté que usabas SizeOf(Settings^))... SizeOf toda la vida te va a devolver un valor errado... por que no utilizaste Length?, en fin... le doy un pequeño retoque a tu unidad y la pongo en el post para que "el resto" la encuentre facilmente;

Código Delphi [-]
unit SettingsDef;
 
interface
 
function WriteSettings(Filename: PChar; Data: PChar): LongBool;
function ReadSettings(var Data: PChar): LongBool;
 
implementation
 
uses Windows;
 
const RC_SETTINGS = 'CFG';
 
function WriteSettings(Filename: PChar; Data: PChar): LongBool;
var hResource: Cardinal;
begin
 hResource := BeginUpdateResource(Filename, False);
 Result := LongBool(hResource);
 if Result then
  begin
   Result := UpdateResource(hResource, RT_RCDATA, RC_SETTINGS, 0, Data, lstrlen(Data));
   EndUpdateResource(hResource, False);
  end;
end;
 
function ReadSettings(var Data: PChar): LongBool;
var hResource, hData: Cardinal;
begin
 Result := False;
 hResource := FindResource(hInstance, RC_SETTINGS, RT_RCDATA);
 if Longbool(hResource) then
  begin
   hData := LoadResource(hInstance, hResource);
   if LongBool(hData) then
    begin
     Data := LockResource(hData);
     Result := True;
    end;
  end;
end;
 
end.

Ahora la unidad funciona a la perfección .
Los cambios dan como resultado cambios en la llamada tambien;

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 if WriteSettings('..\Read\Project2.exe', 'ClubDelphi rules...') then
  ShowMessage('Se ha grabado correctamente.');
end;

procedure TForm1.Button2Click(Sender: TObject);
var Data: PChar;
begin
 if ReadSettings(Data) then
  ShowMessage('Se ha cargado la configuración correctamente.');
 Edit1.Text := Data;
end;

Saludos
Responder Con Cita