Если вы уже звоните LoadResource
и LockResource
, то вы уже на полпути. LockResource
дает указатель на первый байт данных ресурса. Вызовите SizeofResource
, чтобы узнать, сколько там байтов, и вы можете делать с этим блоком памяти все, что захотите, например скопировать его в другой блок памяти или записать в файл.
resinfo := FindResource(module, MakeIntResource(resid), type);
hres := LoadResource(module, resinfo);
pres := LockResource(module, hres);
// The following is the only new line in your code. You should
// already have code like the above.
size := SizeofResource(module, resinfo);
Копировать в другой блок памяти:
var
buffer: TBytes;
SetLength(buffer, size);
Move(pres^, buffer[0], size);
Запись в файл:
var
fs: TStream;
fs := TFileStream.Create('foo.wav', fmCreate);
try
fs.Write(pres^, size);
finally
fs.Free;
end;
Это дает нам несколько способов воспроизведения этих волновых данных:
PlaySound(MakeIntResource(resid), module, snd_Resource);
PlaySound(PChar(pres), 0, snd_Memory);
PlaySound(PChar(@buffer[0]), 0, snd_Memory);
PlaySound('foo.wav', 0, snd_FileName);