Torbins написав:У мене отакий приклад працює нормально:
procedure TForm1.Button2Click(Sender: TObject);
var
  lib: HMODULE;
  rs: TResourceStream;
  ss: TStringStream;
begin
  lib := LoadLibrary('ResLib.dll');
  PlaySound('mess', lib, SND_RESOURCE or SND_SYNC);
  rs := nil;
  ss := nil;
  try
    rs := TResourceStream.Create(lib, 'log', RT_RCDATA);
    ss := TStringStream.Create;
    ss.CopyFrom(rs);
    Memo1.Text := ss.DataString;
  finally
    rs.Free;
    ss.Free;
  end;
  FreeLibrary(lib);
end;
 Пане Torbins в методі ss.CopyFrom(rs); пише що має бути другий параметр.
CopyFrom – метод призначений для копіювання з іншого потоку. Він має два параметри: покажчик на потік, з якого треба копіювати, і число, що показує розмір даних, що підлягають копіюванню;
То що там другим параметром прописати одиницю? Тобто я ж не знаю розмір кожного ресурсу. Щось в цьому рядку я нічого не розумію.
Але хоч звук пішов! Це вже дуже длбре!
procedure TForm1.Button2Click(Sender: TObject);
var
  lib: HMODULE;
  rs: TResourceStream;
  ss: TStringStream;
begin
  lib := LoadLibrary('Physics_Resource.dll');
  PlaySound('S АЛЬТИМЕТРИ', lib, SND_RESOURCE or SND_SYNC);
  rs := nil;
  ss := nil;
  try
    rs := TResourceStream.Create(lib, 'T АЛЬТИМЕТРИ', RT_RCData);
    ss := TStringStream.Create;
    ss.CopyFrom(rs,1);
    RichEdit1.Text := ss.DataString;
  finally
    rs.Free;
    ss.Free;
  end;
  FreeLibrary(lib);
end;
І ще - програма після програвання звуку аварійно завершується!
Можливо щось в самій DLL?
library Physics_Resource; // 08.Листопада.2021
                          // 21.Листопада.2021
uses
  ShareMem,
  Winapi.Windows,
  System.SysUtils,
  Vcl.StdCtrls,
  Vcl.ComCtrls,
  Winapi.MMSystem,
  System.Classes;
{$R *.res}
{$R PhysicsText1.res}
{$R PhysicsSound1.res}
begin
end.