Witam.
Potrzebuje dodac do drugiego programu pewien zasób a potem go odczytac z jego poziomu.
Dziala to na zasadzie takiej: Uzytkownik wprowadza dane potem klika i tekst zostaje zapisany w programie. Po wlaczeniu tego programu wyswietli sie tekst ktory wpisano.
Zapisanie tekstu:
function WriteDataToExe(sValue: string): boolean;
var
hExeFile : THandle;
sBuffer : WideString;
pResourceID : PChar;
iDataSize : word;
begin
pResourceID := 'SCRIPT';
sBuffer := Chr(Length(sValue)) + sValue;
iDataSize := Length(sBuffer) * 2 + 1;
hExeFile := BeginUpdateResource(PChar(ExtractFilePath(Application.ExeName) +
'Main.exe'), False);
if hExeFile <> 0 then
begin
try
Result := UpdateResource(hExeFile,RT_RCDATA, 'SCRIPT', LANG_NEUTRAL,
PWideChar(sBuffer), iDataSize);
if not Result then
MessageDlg('cant write', mtError, [mbOK], 0);
finally
end;
end
else
Result := false;
EndUpdateResource(hExeFile, false);
end;
Procedura jest OK, wszystko sie zapisuje do Main.exe (sprawdzalem ResHackerem).
Odczytać próbuje tak (Main.dpr):
var
rs: TResourceStream;
ms: TMemoryStream;
begin
rs := TResourceStream.Create(HInstance, 'SCRIPT', RT_RCDATA);
rs.SaveToFile('stream.dat'); //zasób jest odczytany na 100%
try
ms := TMemoryStream.Create;
try
rs.Seek(0,0);
ObjectBinaryToText(rs, ms); //proba konwersji binarnej na tekst konczy sie wyjatkiem EReadError
ms.Seek(0,0);
{
... teorytycznie zasob w postaci tekstu powinien siedziec w ms
}
finally
ms.Free;
end;
finally
rs.Free;
end;
Zapis znalazlem na torry.net a odczyt wyjalem z jakiegos tutoriala do odczytywania DFM z exe podczas dzialania programu.
Wesolych swiat :)`