Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2024, 23:07   #1
t232006
Пользователь
 
Регистрация: 30.03.2024
Сообщений: 16
По умолчанию Ресурсы в 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;
звук возникает, если нажимать на клавиши. Почему-то работает, только если ресурс находится здесь. А мне нужно, чтобы он был в библиотеке. Что делать?
t232006 вне форума Ответить с цитированием
Старый 24.06.2024, 01:55   #2
DIONISKA
Форумчанин
 
Регистрация: 07.11.2011
Сообщений: 162
По умолчанию

Цитата:
Сообщение от t232006 Посмотреть сообщение
Что делать?
Можно попробовать таким боком:
Код:
procedure playClick (button: pchar);
begin
 //в потоке, чтобы можно было использовать синхронный режим,
 //  блокировать/освобождать ресурсы
 BeginThread(nil,0,@threadfunc,button,0,MainThreadID);
end;
И процедура, выполняющаяся в потоке:
Код:
procedure threadfunc(param:pchar);
var
  Res: HGLOBAL;
  resData: Pointer;
  function loadres(name:pchar; lptype:PChar=RT_RCDATA):HGLOBAL;
  var
     resSize:Cardinal;
     ResInfo: hrsrc;
  begin
     Result:=0;
     ResInfo:=FindResource(hInstance, name, lptype);
     if ResInfo<>0 then
      begin
        resSize:=SizeofResource(hInstance, ResInfo);
        if resSize=0 then
          begin
            OutputDebugString(PChar('Size of resource '+name+': 0 bytes!'));
            Exit;
          end;
         Result := LoadResource(hInstance, ResInfo);
      end
      else OutputDebugString(PChar('Cannot find resource: '+name));
  end;
begin
    Res:=loadres(param);
   if res<>0 then
     begin
       resData:=LockResource(res);
        if not PlaySound(resData,HInstance,SND_MEMORY or SND_NODEFAULT or SND_SYNC) then
        OutputDebugString(PChar('Error while using PlaySound!'));
       UnlockResource(Res);
     end else
     begin
       Res:=loadres('remain');
       if res<>0 then
        begin
         resData:=LockResource(res);
         if not PlaySound(resData,HInstance,SND_MEMORY or SND_NODEFAULT or SND_SYNC) then
         OutputDebugString(PChar('Error while using PlaySound!'));
         UnlockResource(Res);
        end else
        begin
           OutputDebugString(PChar('Cannot find resource: "remain"!'));
          //воспроизводим стандартный звук, зависит от звуковой схемы (можно убрать)
           sndPlaySound('SYSTEMEXCLAMATION',SND_NODEFAULT);
        end;
     end;
end;
Ну и добавить объявление
Код:
procedure threadfunc(param:pchar); forward;
в начале если хочется поместь процедуру ниже вашей playClick.
DIONISKA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ресурсы rc deniscatch Общие вопросы C/C++ 18 08.09.2013 16:07
Ресурсы (png) в dll casio23 Общие вопросы Delphi 3 30.10.2011 14:03
Ресурсы JeyKip Win Api 2 11.04.2010 10:26
NES ресурсы [Smarik] Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 19.09.2008 23:21
Ресурсы, зачем нужны ресурсы Hallo Обсуждение статей 0 12.12.2006 21:30