• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Builder 10.4 - Dźwięk w programie / Dodawanie bibliotek

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
117 wizyt
pytanie zadane 28 czerwca 2022 w C i C++ przez kuki_shin Użytkownik (620 p.)

Robię właśnie poradnik z Obiektowego C++ Zelenta (odc. 11)  i mam problem.

Przy funkcji sndPlaySound wyskakuje error: no matching function for call. Dałem #include "mmsystem.h" . Przeczuwam, że tej biblioteki nie mam w ogóle w komputerze, ale nie mam pojęcia jak ją dodać. 

Fajnie by było, gdyby ktoś napisał krok po kroku jak to zrobić i skąd najlepiej pobrać bibiotekę.

1 odpowiedź

+1 głos
odpowiedź 28 czerwca 2022 przez j23 Mędrzec (193,480 p.)
wybrane 8 lipca 2022 przez kuki_shin
 
Najlepsza

#include <mmsystem.h>

Pewnie też będziesz musiał dodać w opcjach projektu bibliotekę Winmm.lib.

komentarz 3 lipca 2022 przez kuki_shin Użytkownik (620 p.)
Możesz wytłumaczyć jak dodać tą bibliotekę Winmm.lib? Albo jakiś film na YT czy coś, bo nie mogę znaleźć
komentarz 3 lipca 2022 przez j23 Mędrzec (193,480 p.)

Daj pod include'ami #pragma comment (lib, "winmm.lib")

komentarz 5 lipca 2022 przez kuki_shin Użytkownik (620 p.)
Nadal ten sam błąd z sndPlaySound ://
komentarz 6 lipca 2022 przez j23 Mędrzec (193,480 p.)
Pokaż jak wywołujesz tę funkcję.
komentarz 7 lipca 2022 przez kuki_shin Użytkownik (620 p.)

Tu ona:

sndPlaySound("snd/start.wav", SND_ASYNC)  ;

A tu wszystkie includy:

#include <vcl.h>
#pragma hdrstop
#include <mmsystem.h>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma comment (lib, "winmm.lib")

 

komentarz 7 lipca 2022 przez j23 Mędrzec (193,480 p.)

Używasz nowego C++ Buildera, który zapewne domyślnie używa unikodowych wersji funkcji systemowych.

Możesz zrobić tak:

sndPlaySoundA("snd/start.wav", SND_ASYNC);

/* lub */

sndPlaySoundW(L"snd/start.wav", SND_ASYNC);

/* lub */

sndPlaySound(TEXT("snd/start.wav"), SND_ASYNC);

Ostatni wariant nadaje się tylko do literałów tekstowych.

komentarz 7 lipca 2022 przez kuki_shin Użytkownik (620 p.)
Teraz jeszcze tylko pokazuje: use of undeclared identifier 'SND_ASYNC'
komentarz 7 lipca 2022 przez j23 Mędrzec (193,480 p.)

Dziwne, ta stała jest zdefiniowana w <mmsystem.h>, więc teoretycznie powinno się kompilować... Załącz przed wspomnianym plikiem <windows.h>.

Zakładam, że powyższe nagłówki załączasz w pliku, w którym jest wywołanie sndPlaySound.

komentarz 8 lipca 2022 przez kuki_shin Użytkownik (620 p.)
Nie mam pojęcia jakim cudem, ale a tym projekcie nie chce zadziałać, a w nowo zrobionym wszystko już działa. Dziękuję Ci bardzo, uratowałeś mnie.

Podobne pytania

0 głosów
1 odpowiedź 141 wizyt
pytanie zadane 23 czerwca 2022 w C i C++ przez kuki_shin Użytkownik (620 p.)
0 głosów
1 odpowiedź 140 wizyt
pytanie zadane 23 czerwca 2022 w C i C++ przez kuki_shin Użytkownik (620 p.)

91,786 zapytań

140,451 odpowiedzi

316,847 komentarzy

61,134 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...