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.