[Visual c++] linkowanie/embedding plików

0

Mam taki problem,
Chcę dodać projektu np.plik muzyczny, to co mam zrobić, i jak się potem do niego odwołać?
Chodzi mi tutaj o to, aby potem ten plik znajdował się w pliku *.exe.
Przeglądałem google-a i znalazłem jakiś sposób(w tej chwili nie pamiętam jak i jaki był), tam wpisywałem polecenie(kod), ale niestety to nie działało. Chyba bodajże było on pod dev-a.

0

Dokładniej chodzi mi po porostu o zasoby aplikacji :)

O i właśnie przy

DZWIEK RCDATA "dzwiek.wav"

wywalało mi błędy.

0

pod devem RCDATA w ten sposób chyba nie działało,
zainstaluj coś lepszego, na visualu działa bez problemów

0

//kompilowane Visualem 6.0 (miał być 9 EE, ale nie umiem tam niektórych błędów obsłużyć)

Puls1 RCDATA "puls1.wav"
#include<iostream>
#include<windows.h>
#include<string>
#pragma comment(lib, "winmm.lib")
using namespace std;


int main()
{
	int ppp, puls, ktory = 1,jjj=0;
	double z;
	string dzw,d1,d2;


   cout<<"Podaj metrum: ";
   cin>>ppp;
   if(ppp<0){cout<<"Metrum bedzie rowna 0";ppp=0;}
   cout<<"Podaj puls: ";
   cin>>puls;
   if(puls<10) puls=10;
   z=60000/puls;
   cout<<z<<" ms\n\nWybierz typ dzieku:\n1 - klik\n2 - Gtr. Bass\n3 - Gtr. Bass Slap\n4 - Perkusja\n> ";
   cin>>dzw;
   if(dzw!="1" && dzw!="2" && dzw!="3" && dzw!="4") {system("cls"); return main();}
   d2="puls"+dzw+".wav";
   while(1)
   {
   d1="takt"+dzw+".wav";
   if(dzw=="32") dzw="3";
   else if(dzw=="3") dzw="32";
	   if(ktory==10 || ktory==100 || ktory==1000 || ktory==10000 || ktory==100000 || ktory==1000000 || ktory==10000000 || ktory==100000000 || ktory==1000000000) jjj++;
	cout<<"\ntakt "<<ktory++;for(int xxx=0;xxx<15-jjj;xxx++) cout<<" ";
	cout<<(char)(12);
    sndPlaySound(d1.c_str(), SND_ASYNC);
    Sleep(int(z));
    for(int i = 1; i<ppp; i++)
    {
    sndPlaySound(d2.c_str(), SND_ASYNC);
	cout<<(char)(11);
    Sleep(int(z)); 
    }
   }

 return main();    
}
--------------------Configuration: Metronom - Win32 Debug--------------------
Compiling...
plik.cpp
c:\documents and settings\administrator\pulpit\prg\api\metronom\plik.cpp(1) : error C2146: syntax error : missing ';' before identifier 'RCDATA'
c:\documents and settings\administrator\pulpit\prg\api\metronom\plik.cpp(1) : error C2501: 'Puls1' : missing storage-class or type specifiers
c:\documents and settings\administrator\pulpit\prg\api\metronom\plik.cpp(1) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

plik.obj - 3 error(s), 0 warning(s)

Nie wiem, dlaczego, ale w ogóle jakby nie wiedział, co to jest RCDATA.

0

RCDATA jest słowem kluczowym znanym niektórym kompilarotom zasobów, np gorc. RT_RCDATA jest oficjalną stałą z winuser.h.

0

Definicje zasobów umieszczaj w plikach .RC, które dodajesz do projektu. Do takich plików jest oddzielny kompilator (kompilator zasobów), który kompiluje je do plików binarnych .RES. Pliki RES są następnie dołączane do .exe.

Nie możesz wpisywac tego w pliku .cpp. Poza tym, twój program jest zły, w ten sposób nie odtworzysz dźwięku z zasobów.

0

nic nie wpisywałem, stworzyłem plik rc, który wygląda jak explorator.

-zasoby.rc
       |
       -"WAVE"
             |
     (moje pliki)

moje pliki dodawałem opcją import, jeżeli o to chodziło to jak mam się teraz odwołać do tych plików?

0

Nic nie kumam, wklej jego zawartość. A po drugie po Visualem jest edytor zasobów, czemu z niego nie skorzystasz?

0

http://zapodaj.net/images/ea78e2b886ce.png

//Microsoft Developer Studio generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Polish resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_PLK)
#ifdef _WIN32
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
#pragma code_page(1250)
#endif //_WIN32

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE DISCARDABLE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE DISCARDABLE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// WAVE
//

puls1                   WAVE    DISCARDABLE     "puls1.wav"
puls2                   WAVE    DISCARDABLE     "puls2.wav"
puls3                   WAVE    DISCARDABLE     "puls3.wav"
puls4                   WAVE    DISCARDABLE     "puls4.wav"
takt1                   WAVE    DISCARDABLE     "takt1.wav"
takt2                   WAVE    DISCARDABLE     "takt2.wav"
takt3                   WAVE    DISCARDABLE     "takt3.wav"
takt4                   WAVE    DISCARDABLE     "takt4.wav"
takt32                  WAVE    DISCARDABLE     "takt32.wav"
#endif    // Polish resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////

Czy o to chodziło?

0

Nie wiem więc, jak za bardzo się do tego odwołać, szukałem w googlach, gdzie popadnie, ale nie mogę jakoś znaleźć. Próbowałem też linkować do kodu plik resource.h, skompilowało się, ale nie działało. Jak mam się odwołać do nich?

0

Może tak:

PlaySound(MAKEINTRESOURCE(puls1), AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);

0

Jaki nagłówek/biliotekę mam dołączyć?, bo kiedy nic nie dołączam, to nic nie wie, kiedy dołączam resource.h, to nie kojarzy już tylko AfxGetInstanceHandle().

0

#include "mmsystem.h"

Dołącz też biblioteke Winmm.lib

0
#include<iostream>
#include<windows.h>
#include<string>
#include "mmsystem.h"
#pragma comment(lib, "winmm.lib")
using namespace std;
#include "resource.h"

Niestety dalej to samo. Może jest jakiś zamiennik tej funkcji?

Dla pewności sprawdziłem jeszcze w Visualu 9 EE i też jest ten błąd.

0

Ok, dzięki wam wszystkim wielkie. W drugim parametrze Playsound() trzeba było wpisać NULL ;d.

1 użytkowników online, w tym zalogowanych: 0, gości: 1