![]() |
|
|
#1
|
|||
|
|||
|
Здравствуйте, уважаемые программисты.
Есть DLL, в который внедрены ресурсы (много звуковых файлов). Пишу код вида Код:
library MyLib;
uses
System.SysUtils,
System.Classes, mmSystem, WinAPI.Windows;
{$R MyRes.res}
procedure playClick (button: pchar);
var hResInfo: hrsrc;
begin
hResInfo:=FindResource(hInstance, button, RT_RCDATA);
if hresInfo<>0 then
sndPlaySound(button, SND_RESOURCE + SND_ASYNC + SND_NODEFAULT)
else
sndPlaySound('remain', SND_RESOURCE + SND_ASYNC + SND_NODEFAULT)
end;
exports playClick;
end.Код:
type
TForm1 = class(TForm)
procedure FormKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure playClick(button: pchar); stdcall; external 'MyLib.dll';
var
Form1: TForm1;
implementation
{$R *.dfm}
{$R MyRes.res} //<---- если это убрать, то не работает
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
var s:string;
begin
s:='e'+Key;
PlayClick(pchar(s));
end; |
|
#2
|
|||
|
|||
|
Я так подозреваю, что просто hInstance указывает на основной модуль, а тебе, что бы загрузить ресурс именно из dll, нуден handle именно dll.
Вместо hInstance тебе надо использовать то, что вернет тебе GetModuleHandle. Да, и вместо sndPlaySound тебе надо использовать просто PlaySound, там можно указать хэндл модуля. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
T232006 (28.06.2024)
| ||
|
#3
|
|||
|
|||
|
и правда, теперь всё работает! Спасибо большое!
|