dateien ausführen lassen



  • Tim06TR schrieb:

    @ Badestrand: es passierte einfach nichts kein Compiler Fehler

    Das ist klar, aber ShellExecute gibt bei einem Fehler (z.B. Pfad wurde nicht gefunden) zur Laufzeit einen entsprechenden Fehlercode zurück, den man auswerten kann.



  • ähm mit Musik funktioniert das irgendwie nicht oder mache ich etwas anderes falsch ? 😕



  • Hallo

    Liegt daran das Windows das standardmäßig "detected". Du musst bedenken, dass das im Prinzip nur ein Format mit irgendwelchen Daten ist, mehr nicht. Das Format wird von Windows erkannt und bei Dobbälklick wird dieses File direkt an einen Autoplayer geschickt, der dieses File intepretiret, decodiert und dann wiedergibt. Falls du also ein Lied abspielen möchtest, gibt es Standardfunktionen aus der stdio.h wie zum Beispiel diese hier um WAV-Dateien abzuspielen:

    PlaySound(name, NULL, SND_FILENAME | SND_ASYNC);
    

    Bevor die berüchtigte Frage kommt, dass kannst du so machen:

    #include <windows.h>
    #include <iostream>
    #include <stdio.h>
    
    //#pragma comment(lib,"winmm.lib"); Für VS, kennt man ja mittlerweile
    
    bool PlayWAV(const char *Filename)
    {
       if(Filename == NULL)std::cout<<"Nae, nix gefunden!"<<std::endl; return false;
       PlaySound(name, NULL, SND_FILENAME | SND_ASYNC);
    };
    
    int main()
    {
       PlaySound("tätätätääää.wav");
    
       std::cin.get();
    }
    

    Mfg.
    way



  • Diese Frage kommt bestimmt voll blöd rüber aber bei der verwendung von:

    PlaySound(instpa.c_str(), NULL, SND_FILENAME | SND_ASYNC);
    \\instpa = pfad der datei
    

    kommt folgender compiler ERROR

    [Linker error] undefined reference to `PlaySoundA@12'
    

    und danach

    ld returned 1 exit status
    


  • Hallo

    Er versucht auf die Standardfunktion zu referieren bzw. zuzugreifen. Hast du die stdio includiert? Bist du sicher das sie vorhanden ist? Mit welcher IDE arbeitest du, mit Visual Studio oder einer Anderen (wie zum Beispiel Dev-C++, Borland...)?

    Mfg.
    way



  • die stdio.h (.h!) ist drin
    und ich arbeite mit dem veralteten Dev C++ (Ich nutzt das weil es sehr unkompliziert und kostenlos ist)

    durchs googeln hab ich nichts anständiges gefunden.
    nur steig auf ein anderes Programm um Dev cpp ist veraltet.

    Gibt es eine alternative zu PlaySound ? ist mir all ****** egal hauptsache irgendetwas spielt dann ein gewähltes tönchen oder lied ab.

    mit der alternative:

    mciSendString("open file.mp3", NULL, 0, NULL); 
      mciSendString("play file.mp3 wait", NULL, 0, NULL); 
      mciSendString("close file.mp3", NULL, 0, NULL);
    (anwendungsbeispiel)
    

    kommt:
    (aufgepasst)

    [Linker error] undefined reference to `mciSendStringA@16'
    

    ach was für ein wunder A@16.
    ist das alles ein mist 😡


  • Administrator

    Google
    PlaySound MSDN eingeben
    Erster Link anklicken
    -> http://msdn.microsoft.com/en-us/library/ms712879.aspx

    Ganz unten steht:
    Library: Use Winmm.lib

    Anders gesagt, du musst die Winmm.lib zu deinem Projekt linken, damit du PlaySound verwenden kannst.

    <stdio.h> ist übrigens kein C++ Header, sondern ein C Header. In C++ heisst der <cstdio> .

    Gratis IDEs gibt es auch aktuellere:
    - Code::Blocks
    - Microsoft Visual Studio 2008 Express Edition

    Die Microsoft IDE ist vielleicht nicht ganz so einfach zu verstehen, bietet dafür einen extremen Umfang an Funktionen.
    Code::Blocks sollte sehr leicht zu verwenden sein.

    ShellExecute auf ein Soundfile öffnet einfach den Defaultplayer für dieses Soundfile, sofern alle Eingaben korrekt waren.

    @way,
    Was soll das mit stdio zu tun haben??

    Grüssli



  • Hallo

    Was soll das mit stdio zu tun haben??

    Kommt das nicht aus stdio?

    Mfg.
    way


  • Administrator

    way schrieb:

    Was soll das mit stdio zu tun haben??

    Kommt das nicht aus stdio?

    Tut mir Leid, aber da musste ich jetzt lachen 😃
    Die Funktion unterscheidet sich ja schon nur in der Schreibweise von Standardfunktionen.

    In <cstdio> findest du die folgenden Funktionen:
    http://www.cplusplus.com/reference/clibrary/cstdio/

    PlaySound ist ganz eindeutig eine WinAPI Funktion. Kannst du auch im Link nachlesen, den ich oben hingeschrieben habe (bzw. Copy&Paste aus der Browseradresszeile).

    Grüssli



  • Dravere schrieb:

    ...

    Mal davon abgesehen, löst das Einbinden eines Headers i.d.R. keine undefinierten Referenzen auf.



  • das hab ich mir auch schon angesehen, aber irgendwie will es trotzdem nicht.

    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    #include <string>
    #pragma comment( lib, "winmm.lib" )
    #include <mmsystem.h>
    #include <stdio.h>
    #include <fstream>
    #include <conio.h>
    #include <cstdio>
    #include <sstream>
    #include <stdlib.h>
    

    das sind alles sachen die ich mit drin hab und wenn da was fehlen sollte informiert mich :(.
    (natürlich hat dies Programm noch viele andere Funktionen, daher die vielen libs.



  • wenn du dev cpp mit mingw benutzt heisst die lib libwinmm.a



  • ähm ja ich nutze Dev cpp mit mingw.
    aber bei

    #pragma comment( lib, "libwinmm.a" )
    

    geht es auch nicht oder mache ich hier wieder einen fehler ?


  • Administrator

    #pragma comment ist kein Standard C++. Keine Ahnung ober das der MinGW Kompiler auch unterstützt. Am besten linkt man solche Dinge im Makefile, bzw. in der IDE in den Kompileroptionen zum Projekt. Aber ich hätte keine Ahnung, wo man dies unter DevCpp findet, da ich den nicht verwende.

    Grüssli



  • füg die lib mal in den projekteinstellungen dazu, mingw scheint pragma comment nicht zu unterstützen

    edit: hab die neueste version, der mag das nicht



  • Kann mir jemand sagen wie man das bei Dev C++ 4.9.9.2 macht ich hab nähmlich keine Ahnung 😃 🙄



  • guck mal im menü unter projekt und optionen, da müsste bei einem reiter drei textfelder sein, unten rechts ist da so ein button wo steht library zum projekt hinzufügen. (nicht sehr präzise, aber wirst es schon finden 😉 )



  • IHR SEID GENIAL 😃 freu
    es gibt keinen Compiler fehler mehr und die Beschreibung reichte schon.. mal sehen ob es geht.
    DANKE
    EDIT:
    Ich weiß zwar nicht warum aber zu hören ist nichts.

    installpath = instpa;
        for(;cond[1]!=1;)
        {
        if(song==1)
        {
                   instpa += "\\data\\Music\\R1.wma";
                   ShellExecute(NULL, "open", instpa.c_str(),  NULL,  NULL,  SW_SHOWNORMAL);
                   cond[1]=1;
                   }
                   if(song==2)
        {
                   instpa += "\\data\\Music\\R2.wma";
                   ShellExecute(NULL, "open", instpa.c_str(),  NULL,  NULL,  SW_SHOWNORMAL);
                   cond[1]=1;
                   }
                   if(song==1)
        {
                   instpa += "\\data\\Music\\R3.wma";
                   ShellExecute(NULL, "open", instpa.c_str(),  NULL,  NULL,  SW_SHOWNORMAL);
                   cond[1]=1;
                   }
                   if(song!=1&&song!=2&&song!=3)
                   {
                                                cout<<"ERROR [201] (1-3) eingabe erfolgt erneut";
                                                MessageBox(NULL,"Error in Line 88 |code [201]","Syntax Error",MB_OK|MB_ICONERROR);
                                                cin>>song;
                                                }
                   }
    
                   PlaySound(instpa.c_str(), NULL, SND_FILENAME | SND_ASYNC);
    

    hier ein ausschnitt.
    was ist denn nun falsch ? installpath = D:\\Runexe
    also eigentlich richtig
    zumindest ist das A@12 weg

    EDIT:
    Ich hab vergessen, dass das nicht mit mp3 geht aber mit

    mciSendString(instpa.c_str(), NULL, 0, NULL);
          mciSendString(instpa.c_str(), NULL, 0, NULL);
    

    auch nicht



  • Wieso benutzt du eigentlich nicht eine moderne IDE wie Code::Blocks oder Microsoft Visual C++ Express? Die sind genauso kostenlos, aber aktueller und werden im Gegensatz zu Dev-C++ noch weiterentwickelt.


  • Administrator

    Tim06TR schrieb:

    EDIT:
    Ich hab vergessen, dass das nicht mit mp3 geht aber mit

    mciSendString(instpa.c_str(), NULL, 0, NULL);
          mciSendString(instpa.c_str(), NULL, 0, NULL);
    

    auch nicht

    Hmmm, Dokumentationen sind wohl da, damit man sie ignorieren kann:
    http://msdn.microsoft.com/en-us/library/ms709492.aspx

    Als Beispiel:

    mciSendString("play C:\\test.mp3", 0, 0, 0);
    

    Falls das nicht funktioniert, dann wohl deswegen weil mciSendString nicht blockiert. Also musst du über die Callback möglichkeit arbeiten, damit das Programm erst beendet wird, wenn das Stück auch zuende ist.

    Grüssli


Anmelden zum Antworten