2012-06-07 3 views
6

Wie schreibt man in Delphi einen MemoryStream in eine Datenressource?Einen Stream in eine RCDATA-Ressource schreiben

procedure StringtoRes (filename:string; Inputstream: TMemoryStream); 
var 
hUpdate: THandle; 
begin 
hUpdate := BeginUpdateResource(PChar(filename), True); 
UpdateResource(hUpdate, RT_RCDATA, 'ID', LANG_NEUTRAL,InputStream,InputStream.Size); 
EndUpdateResource(hUpdate,False); 
end; 

Dieser Code gibt mir eine Zugriffsverletzung und ein intensives Gefühl von inadequancy, weil ich nicht einmal wissen, wo es zu reparieren zu beginnen. Tut jemand?

Antwort

11

Im lpData Parameter von UpdateResource(), müssen Sie den Wert der Eigenschaft TMemoryStream.Memory passieren anstelle des TMemoryStream Objektzeiger, zB:

procedure StringtoRes (const FileName: string; Inputstream: TMemoryStream); 
var 
    hUpdate: THandle; 
begin 
    hUpdate := BeginUpdateResource(PChar(FileName), True); 
    try 
    UpdateResource(hUpdate, RT_RCDATA, 'ID', LANG_NEUTRAL, InputStream.Memory, InputStream.Size); 
    finally 
    EndUpdateResource(hUpdate, False); 
    end; 
end;