2012-06-07 53 views
6

在delphi中,如何将MemoryStream写入数据资源?将流写入RCDATA资源

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; 

此代码给了我一个访问冲突和inadequancy的强烈感觉,因为我甚至不知道从哪里开始修复它。有没有人?

回答

11

UpdateResource()lpData参数,你需要通过TMemoryStream.Memory属性而不是TMemoryStream对象指针的值,例如:

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;