Jane, ist klar.
Du musst das laden der Resource global machen. Windows läd zur Wiedergabe nur einen Teil der Resource.
In deinem Fall heisst dass das wenn der Sound wiedergegeben wird nicht die Resource nachgeladen werden kann und somit hängt das Programm...
So wird es richtiger:
Delphi-Quellcode:
//...
const
SoundsDLL = '
MediaRes.dll';
var
DLLHandle: THandle;
procedure TForm.ButtonClick...
begin
PlaySound(
Nil, 0, 0);
if DLLHandle > 0
then
begin
if not PlaySound(PChar('
SNDOK'), DLLHandle, SND_ASYNC
Or SND_MEMORY
Or SND_RESOURCE)
then
MessageBox(
Handle, '
Sound konnte nicht abgespielt werden', '
Information', MB_OK);
end else
begin
MessageBox(
Handle, '
DLL-Ladefehler', '
Information', MB_OK);
end;
end;
procedure TForm.FormCreate...
begin
DLLHandle := LoadLibraryEx(SoundsDLL, 0, LOAD_LIBRARY_AS_DATAFILE);
end;
procedure TForm.FormDestroy...;
begin
FreeLibrary(DLLHandle);
end;
//...
(ungetested)