Laufwerk zum öffnen definieren...



  • Hallöchen!

    Ich hab hier Kot 😃 :

    #include <windows.h>
    
    BOOL DoOpenCdRom(void) 
    { 
      char chrRc[256]; 
      char *ptrChrRc = &chrRc[0]; 
      return mciSendString("Set CDAudio Door Open\0",ptrChrRc,256,NULL); 
    
    } 
    
    BOOL DoCloseCdRom(void) 
    { 
    
      char chrRc[256]; 
      char *ptrChrRc = &chrRc[0]; 
      return mciSendString("Set CDAudio Door Closed\0",ptrChrRc,256,NULL); 
    } 
    
    int main() 
    { 
     DoOpenCdRom();
     Sleep(5000);
     DoCloseCdRom(); 
    
     return 0;
    }
    

    der öffnet und schließt das CD-Rom-Laufwerk. Ich würd jetzt aber ganz gerne wissen, wo und wie genau das Laufwerk bezeichnet ist und wie ich es ändern kann. Ich hätte gerne, dass das zu öffnende Laufwerk in einer Variablen gespeichert ist. Die wiederum soll ihren Inhalt aus einer ini-Datei bekommen. Kann mir da vielleicht jemand helfen?

    Bevor ihr mich steinigt, ich sei damit hier falsch, ich bin hierher verwiesen worden...

    Vielen Dank im Voraus!

    mfg
    Lars



  • Streng dich ein bissel selber an, OK? Das mit der Datei kriegste sicher selber hin, hier suchen, google, etc.

    Hier kannst du gucken wie das mit den zwei Laufwerken klappt:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-80618.html



  • OKay okay, Asche auf mein Haupt. Das mit der Datei bekomm ich schon hin. Mein Problem ist, das ich mit der Funktion

    char chrRc[256];
      char *ptrChrRc = &chrRc[0];
      return mciSendString("Set CDAudio Door Closed\0",ptrChrRc,256,NULL);
    

    noch nicht do recht umzugehen weiß, bzw wie da das Laufwerk definiert ist. Die ersten beiden Zeilen sind für mich Böhmische Dörfer.
    Hab mir die Funktion zwar in der MSDN angesehen, aber irgendwie bringt mich das noch nicht so recht weiter. Sorry, aber was die WinAPI angeht bin ich echt noch blutiger Anfänger...



  • pennywise81 schrieb:

    wie da das Laufwerk definiert ist.

    gar nicht er benutzt das "standardlaufwerk" (afaik das erste cdrom im alphabet)

    pennywise81 schrieb:

    Die ersten beiden Zeilen sind für mich Böhmische Dörfer.

    // du erstellst ein char array mit einer grösse von 256 chars
    char chrRc[256];
    // ptrChrRc ist ein zeiger auf die adresse des ersten elements im array
    char *ptrChrRc = &chrRc[0];
    


  • Dange. Wozu ist denn dieser Array gut? Reserviert der Speicher? Und wie könnt ich der Fkt beibringen, nicht das Standartlfwrk zu nehmen, sondern das, welches ich ihr sage?



  • pennywise81 schrieb:

    Und wie könnt ich der Fkt beibringen, nicht das Standartlfwrk zu nehmen, sondern das, welches ich ihr sage?

    http://www.cpp-tutor.de/cpp/le06/le06_01.htm
    http://tutorial.schornboeck.net/arrays.htm
    oben rechts findest du noch viele andere tutorials

    pennywise81 schrieb:

    Dange. Wozu ist denn dieser Array gut? Reserviert der Speicher?

    link zur faq wurde schon gepostet
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-80618.html



  • Okay, ich hab das jetzt soweit verstanden. So sieht nun meine Source aus:

    #include <windows.h>
    // #include <stdafx.h>
    
    void laufwerksteurung(char *Laufwerk, int Status);
    
    int main() 
    {
        laufwerksteuerung("f:",1);        // öffnen
        Sleep(3000);                      // 3 Sekunden warten
        laufwerksteuerung("f:",0);        // schließen
    
        return 0;
    }
    
    void laufwerksteurung(char *Laufwerk, int Status)
    {
         // MCIString initialisieren
         char MCIString[500];             
    
         // 'Laufwerk' in 'MCIString' speichern
         wsprintf(MCIString,"open %s type cdaudio alias CDRom",Laufwerk);
         mciSendString(MCIString,Null,0,Null);
    
         if (Status>0)
         {
            mciSendString("set CDRom door open",Null,0,Null);
         }
         else
         {
            mciSendString("set CDRom door closed",Null,0,Null);
         } 
    
         return;
    }
    

    Allerdings bekomme ich einen Compilerfehler:

    8 C:\Dev-Cpp\Unbenannt1.cpp `laufwerksteuerung' undeclared (first use this function)
    

    Versteh allerdings nicht warum. Weiß jemand Rat?
    Zweite Frage: Was ist die stdafx.h und wofür brauch ich die? Brauch ich die überhaupt?

    Vielen vielen Dank bis hierhin...

    mfg
    Lars



  • rechtschreibung ⚠
    laufwerksteurung != laufwerksteuerung

    pennywise81 schrieb:

    Zweite Frage: Was ist die stdafx.h und wofür brauch ich die? Brauch ich die überhaupt?

    brauchst du nicht

    [edit]
    der nächste fehler wird das Null sein. entweder NULL oder 0
    und winmm nicht vergessen mitzulinken



  • Oh man bin ich Panne! War wohl ne Tasse Kaffee zu viel.

    Danke für's finden 😃



  • pennywise81 schrieb:

    War wohl ne Tasse Kaffee zu viel.

    geht sowas 😕 😃



  • 'dammich, zwei neue Fehler:

    [Linker error] undefined reference to `laufwerksteuerung(char*, int)'
    
    [Linker error] undefined reference to `mciSendStringA@16'
    

    Hab die winmm per

    -winmm
    

    in den Linkeroptionen vom Dev eingebunden. Falsch?



  • pennywise81 schrieb:

    'dammich, zwei neue Fehler:

    [Linker error] undefined reference to `laufwerksteuerung(char*, int)'
    

    dürfte eigentlich nicht sein, hast du funnktion in eine andere datei ausgelagert?

    pennywise81 schrieb:

    Hab die winmm per

    -winmm
    

    in den Linkeroptionen vom Dev eingebunden. Falsch?

    fast richtig. -lwinmm
    -l wie linken 😉



  • Nee, ist alles nur in diesem Quelltext. Hab ich vielleicht wieder irgendwas übersehen?
    (winmm hab ich jetzt richtig eingebunden, der mciSendString-Fehler ist wech.)

    #include <windows.h>
    
    void laufwerksteuerung(char *Laufwerk, int Status);
    
    int main() 
    {
        laufwerksteuerung("f:",1);        // öffnen
        Sleep(3000);                      // 3 Sekunden warten
        laufwerksteuerung("f:",0);        // schließen
    
        return 0;
    }
    
    void laufwerksteurung(char *Laufwerk, int Status)
    {
         // MCIString initialisieren
         char MCIString[500];             
    
         // 'Laufwerk' in 'MCIString' speichern
         wsprintf(MCIString,"open %s type cdaudio alias CDRom",Laufwerk);
         mciSendString(MCIString,NULL,0,NULL);
    
         if (Status>0)
         {
            mciSendString("set CDRom door open",NULL,0,NULL);
         }
         else
         {
            mciSendString("set CDRom door closed",NULL,0,NULL);
         } 
    
         return;
    }
    


  • rechtschreibung die zweite
    definition stimmt nicht mit implementierung überein

    void laufwerksteuerung(char *Laufwerk, int Status);
    void laufwerksteurung(char *Laufwerk, int Status) { //...
    


  • Echt, ich gehör erschossen! Danke Dir, es funktioniert jetzt...
    Der Vollständigkeit halber hier nochmal der komplette Quellcode:

    #include <windows.h>
    
    void laufwerksteuerung(char *Laufwerk, int Status);
    
    int main() 
    {
        laufwerksteuerung("f:",1);        // öffnen
        Sleep(3000);                      // 3 Sekunden warten
        laufwerksteuerung("f:",0);        // schließen
    
        return 0;
    }
    
    void laufwerksteuerung(char *Laufwerk, int Status)
    {
         // MCIString initialisieren
         char MCIString[500];             
    
         // 'Laufwerk' in 'MCIString' speichern
         wsprintf(MCIString,"open %s type cdaudio alias CDRom",Laufwerk);
         mciSendString(MCIString,NULL,0,NULL);
    
         if (Status>0)
         {
            mciSendString("set CDRom door open",NULL,0,NULL);
         }
         else
         {
            mciSendString("set CDRom door closed",NULL,0,NULL);
         } 
    
         return;
    }
    



Anmelden zum Antworten