|
#1
|
|||
|
|||
Ресурсы в DLL
Здравствуйте, уважаемые программисты.
Есть 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
|
|||
|
|||
и правда, теперь всё работает! Спасибо большое!
|