Warum, warum nur funktioniert der Sound nicht im CBuilder(6)...



  • Elfe schrieb:

    Wie komme ich an diesen "Return-Code" denn dran ? Das kenne ich nicht.....

    Diese Funktionen geben doch alle etwas vom Typ HRESULT zurück.

    FAILED und SUCCEEDED test doch nur, ob der Wert größer oder kleiner 0 ist.

    #define FAILED(hr) (((HRESULT)(hr)) < 0)
    #define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
    

    lies mal

    http://msdn.microsoft.com/de-de/library/windows/desktop/ms679692%28v=vs.85%29.aspx
    usw.



  • Hallo nn,

    Der angegebene Link tuts nicht -> ... Die Seite msdn.microsoft.com wurde nicht gefunden. ...

    Ja, eine Zahl bekomme ich auch als Ergebnis. Aber was steckt dahinter ?
    Etwa 101, oder 107, 98 oder 96.... Aber das ist ja kein Return-Code.

    Wie erhalte ich aus hr einen Return-Code-Text wie DSERR_ALLOCATED ?
    Nur "hr" reicht ja nicht.

    Werd mal under M$ nachsehen, ob ich da was finden kann....

    Gruß



  • Elfe schrieb:

    Der angegebene Link tuts nicht -> ... Die Seite msdn.microsoft.com wurde nicht gefunden. ...

    Geht, habs gerade probliert. Firefox und IE.

    Elfe schrieb:

    Wie erhalte ich aus hr einen Return-Code-Text wie DSERR_ALLOCATED ?

    Ob man ohne Suchen dazu Text kriegt, weiß ich nicht. Die Makros zum Zerlegen der Zahlencodes stehen in dem Link.

    Wie die hr Nummern aufgebaut sind, wird auch in dem Link erklärt. Siehe "Structure of COM Error Codes".



  • Hallo nn, ( vorab -> Danke für Deine Mühe )
    Das hier habe ich herausgefunden ->

    Die DxErr9.lib muss eine ganz bestimmte sein.(Es gibt mehrere Versionen)
    Außerdem benötigt sie noch die DXErr9ab.dll
    sonst funktioniert der Return-Code nicht.

    Damit erhalte ich nun folgende Ergebnisse :

    Eingabe :_____________________Return-Code :

    DS-Create____________________Unknown
    CreateSoundBuffer_____________ERROR_EXCL_SEM_ALREADY_OWNED

    DS-CaptureCreate______________ERROR_INVALID_PASSWORD (->obwohl als erfolgreich gemeldet)
    CreateCaptureBuffer____________ERROR_DISK_CHANGE

    Das ist doch schonmal was. Kann man damit etwas anfangen ?

    Gruß



  • Hi,
    findest du es nicht ein bißchen seltsam, das z.b. "CreateCaptureBuffer" eine Fehlermeldung "ERROR_DISK_CHANGE" und "DS-CaptureCreate" "ERROR_INVALID_PASSWORD" zurückgeben soll?
    Hast du ein Passwort eingegeben? Ich glaube nicht.
    Die Returncodes sind außerdem kein Text, sondern eine Makro-Definition, die eine "Zahl" zurückgibt. ( zu finden in dsound.h ).
    Warum du dafür "DxErr9.lib" einbinden musst, erschließt sich mir auch nicht ganz.

    Da man weiterhin nicht sieht, was du tust -> Code, ist es ein munteres Raten woran es liegen könnte.

    [... wollte halt nur nicht sinnlos etwas hinschreiben, was ohnehin
    jeder kennt ... ]

    Manchmal ist es nur eine Kleinigkeit und dann ist es mit Sicherheit nicht sinnlos...

    Bis dahin werde ich mich hier erstmal raushalten.

    mfg



  • Sound1234 schrieb:

    Bis dahin werde ich mich hier erstmal raushalten.

    Ich auch, nach einem letzten Verweis auf

    http://msdn.microsoft.com/de-de/library/windows/desktop/ee416774%28v=vs.85%29.aspx
    (ja, der Link funktioniert)



  • Zunächt mal hallo,

    Ich weiß nicht, warum Ihr euch so aufregt ?
    Ich möchte etwas wissen, ( lernen ) und Ihr wollt von mir wissen, warum etwas wie ist ( geht ).
    Danach frage ich doch gerade hier.

    > findest du es nicht ein bißchen seltsam, das ... ... zurückgeben soll ?

    Nein, weshalb ? Woher soll ich wissen, wie das zustande kommt. Danach
    frage ich ja gerade hier. Außerdem hat mir niemand sagen können, wie ich an

    > Returncodes sind außerdem kein Text

    die Richtigen Infos drankomme und wie sie aussehen.

    > Warum du dafür "DXErr9.lib" einbinden musst, erschließt sich mir auch nicht ganz.

    Mir auch nicht. Es war die einzige Möglichkeit, dem Programm eine Antwort zu entlocken.
    Ich erhalte sonst nur "0".

    Ich versuche lediglich mit DSound zurechtzukommen. ( Und zu lernen, wie das geht )
    Ich weiß nicht, warum das nicht geht. Mit D3D habe ich keine Probleme. Und mit DMusic
    auch nicht. Aber man kann eben mit DMusic nicht speichern.

    Der Link funktioniert bei mir nicht. Ich weiß nicht, warum ?

    Und warum das

    > ... halte ich mich hier raus ... << ???????????

    Habe ich euch etwas getan ??????????????????

    Und hier also der Code ( ... aber beschwert euch bitte nicht, wenn es zu lang ist ... ) [ Wenn ihrs ausprobieren wollt, es braucht 5 Buttons, 2 Labels und
    ein Edit ]

    mit Gruß

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    
    #include "windows.h" // für MessageBox
    
    //====================================
    
    #include "DSUtil.h"
    #include "dsound.h"
    
    IDirectSound*              SndSchnittSt;
    LPCGUID                    Fuehrer;
    
    IDirectSoundBuffer*        Puffer;
    DSBUFFERDESC*              Platte;
    
    IDirectSoundCapture*       SpSchnittSt;
    const GUID*                SpFuehrer;
    
    IDirectSoundCaptureBuffer* SpPuffer;
    const DSCBUFFERDESC*       SpPlatte;
    
    //====================================
    
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    
    int Modus = 0;
    
    #include "dxerr9.h"
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      Modus = 1;
    
                                          if (FAILED(  //  if (SUCCEEDED(
      // Dies funktioniert
      DirectSoundCreate( Fuehrer,
                         &SndSchnittSt,
                         NULL
                       )                   ))
                                           {
                                            MessageBox( NULL,
                                                        "DirectSound Create\n    fehlgeschlagen!",
                                                        "Meldung :",
                                                        0
                                                      );
                                           }
                                          else
                                           {
    
                                            HRESULT Info;
    
                                            //Label1->Caption = Info; // > Ausgabe  96
                                            //Label1->Caption = DXGetErrorString9( Info );
                                            MEd->Text = Info;
    
                                            MessageBox( NULL,
                                                        "DirectSound Create\n    erfolgreich !",
                                                        "Meldung :",
                                                        0
                                                      );
                                              }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
                                                 if (FAILED(
       // Dies funktioniert NICHT
       SndSchnittSt->CreateSoundBuffer( Platte,
                                        &Puffer,
                                        NULL
                                      )
                                                 ))
                                                  {
    
                                                   HRESULT Info;
    
                                                   //Label1->Caption = Info; // > Ausgabe 101
                                                   //Label1->Caption = DXGetErrorString9( Info );
                                                   MEd->Text = Info;
    
                                                   MessageBox( NULL,
                                                              "Create SoundBuffer\n \nfehlgeschlagen!",
                                                              "Meldung :",
                                                              0
                                                            );
                                                   }
                                                 else
                                                   {
                                                    MessageBox( NULL,
                                                                "Create SoundBuffer\n \n   erfolgreich !",
                                                                "Meldung :",
                                                                0
                                                              );
                                                   }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
                                               if (FAILED(
        // Dies funktioniert ??
        DirectSoundCaptureCreate( SpFuehrer,
                                  &SpSchnittSt,
                                  NULL
                                )
                                               ))
                                                {
                                                 MessageBox( NULL,
                                                             "Capture Create\n \n   fehlgeschlagen!",
                                                             "Meldung :",
                                                             0
                                                           );
                                                }
                                               else
                                                {
    
                                                 HRESULT Info;
    
                                                 //Label1->Caption = Info; // > Ausgabe  86
                                                 //Label1->Caption = DXGetErrorString9( Info );
                                                 MEd->Text = Info;
    
                                                 MessageBox( NULL,
                                                             "Capture Create\n \n   erfolgreich !",
                                                             "Meldung :",
                                                             0
                                                           );
                                                }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
                                                    if (FAILED(
       // Dies funktioniert NICHT
       SpSchnittSt->CreateCaptureBuffer( SpPlatte,
                                         &SpPuffer,
                                         NULL
                                       )
                                                     ))
                                                      {
    
                                                       HRESULT Info;
    
                                                       //Label1->Caption = IntToStr(Info);  // > Ausgabe 107
                                                       //Label1->Caption = DXGetErrorString9( Info );
                                                       MEd->Text = Info;
    
                                                       MessageBox( NULL,
                                                                   "Create CaptureBuffer\n \n   fehlgeschlagen!",
                                                                   "Meldung :",
                                                                   0
                                                                 );
                                                       }
                                                      else
                                                       {
                                                        MessageBox( NULL,
                                                                    "Create CaptureBuffer\n \n   erfolgreich !",
                                                                    "Meldung :",
                                                                    0
                                                                  );
                                                       }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
    
      if ( Modus == 0 ) MessageBox( NULL,
                                    "Erst \n DirectSoundCreate \n drücken !",
                                    "Meldung :",
                                    0
                                  );
    
      if ( SndSchnittSt )
         {
                                  if (FAILED(
      SndSchnittSt->Release()
                                   ))
                                   {
                                    MessageBox( NULL,
                                                "SndSchnittSt -> Release\n \n         fehlgeschlagen!",
                                                "Meldung :",
                                                0
                                              );
                                    }
                                  else
                                    {
                                     MessageBox( NULL,
                                                 "SndSchnittSt -> Release\n \n         erfolgreich !",
                                                 "Meldung :",
                                                 0
                                               );
                                    }
          }
    
      if (SpSchnittSt)
          {
                                  if (FAILED(
       SpSchnittSt->Release()
                                   ))
                                    {
                                     MessageBox( NULL,
                                                 "SpSchnittSt -> Release\n \n         fehlgeschlagen!",
                                                 "Meldung :",
                                                 0
                                               );
                                    }
                                  else
                                    {
                                     MessageBox( NULL,
                                                 "SpSchnittSt -> Release\n \n         erfolgreich !",
                                                 "Meldung :",
                                                 0
                                               );
                                    }
           }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
    
        int CodeIndex = StrToInt(Edit1->Text);
        MEd->Text = CodeIndex;
    
        //Label1->Caption = Meldung;  // > Ausgabe 107
        Label1->Caption = DXGetErrorString9( CodeIndex );
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::MEdChange(TObject *Sender)
    {
        int CodeIndex = StrToInt(MEd->Text);
        //Label1->Caption = Meldung;  // > Ausgabe 107
        Label1->Caption = DXGetErrorString9( CodeIndex );
    }
    //---------------------------------------------------------------------------
    


  • Elfe schrieb:

    Ich weiß nicht, warum Ihr euch so aufregt ?

    Angesichts der Dauer der Diskussion (seit dem 17.11.) verlieren wir halt die Lust dir zu helfen.

    Elfe schrieb:

    Mit D3D habe ich keine Probleme. Und mit DMusic
    auch nicht.

    Daran habe ich nach kurzem überfliegen deines Quelltextes Zweifel.

    Elfe schrieb:

    Der Link funktioniert bei mir nicht. Ich weiß nicht, warum ?

    Das gehört auch zu den Dingen, die ich nicht nachvollziehen kann.

    So, nun zu deinem Program

    // Gekürzter Auszug
    HRESULT Info;
    
    MEd->Text = Info;
    

    Du legst da eine nicht initialisierte Variable an, sprich mit zufälligem Inhalt. Was bringt dich dazu zu glauben, der Inhalt hätte irgendwas mit dem Rückgabewert einer Funktion zu tun ?

    Man ruft das so auf

    HRESULT Info = Irgendeine_COM_Funktion();
    

    dann kannst du damit trotzdem noch z.B.

    if ( FAILED(Info) )
    

    verwenden, aber auch z.B. mit dem Debugger nachsehen, was da zurück gekommen ist.

    Tut mir leid, ich verliere wirklich die Lust zu antworten.



  • .

    Muss man hier eigentlich

    Informatik studiert haben

    um hier eine Frage zu stellen ??? 🙄

    .



  • .

    DirectSoundCreate____________S_OK

    - CreateSoundBuffer__________-2147024____E_INVALIDARG

    DirectSoundCaptureCreate_____S_OK

    - CreateCaptureBuffer________-2147024____E_INVALIDARG

    .



  • Der erste Parameter von IDirectSound8::CreateSoundBuffer muss die Adresse einer DSBUFFERDESC-Struktur sein, in der der zu erstellende Soundbuffer beschrieben wird. Du übergibst einen uninitialisierten Zeiger.



  • Elfe schrieb:

    .
    Muss man hier eigentlich
    Informatik studiert haben
    um hier eine Frage zu stellen ??? 🙄
    .

    Nein sicher nicht. Aber man sieht an deinem Code und deiner Fragestellung, dass noch erheblicher Nachholbedarf an Basiswissen besteht (nicht böse gemeint). Und es ist halt einfach etwas anstrengend, jemandem ohne diesem Basiswissen zu helfen.

    Aber mit dem Returnvalue E_INVALIDARG und der Antwort von MFK, sollte die Problemlösung einfach sein.
    Deshalb bat ich auch um deinen Code...woher hätte man sonst sehen sollen, was du da an was übergibst.

    mfg



  • Sound schrieb :

    ...Nachholbedarf an Basiswissen besteht...

    ...Woher soll man (ich) es denn haben, wenn es keine Bücher dazu gibt, auch im Internet nichts zu finden ist. Erklären tut es einem ja keiner. Nur beschweren tun sich alle, wenn man etwas nicht weiß. Also versucht man, aus dem was man finden kann, aus tausend Quellen, etwas zusammen zu basteln. Und wer nicht mag, braucht ja nicht zu antworten. Ich zwinge Niemanden.

    Danke MfK. ( ...auch für die konkrete Antwort )Sieh mal das Ergebnis :

    DS-Create________________0___S_OK
    CreateSoundBuffer_________0___S_OK
    DS-CaptureCreate__________0___S_OK
    CreateCaptureBuffer________0___S_OK

    Wenn das kein Erfolg ist ?!?!

    Nur

    if ( Buffer ) Buffer->Release;
    

    erzeugt Zugriffsverletzungen. Warum das ?
    Es soll doch nur dann ein Release geben, wenn es einen Buffer gibt, ...sonst nicht. 🙄

    Bei if ( SndSchnittSt ) SndSchnittSt->Release funktioniert das doch auch.
    Warum beim Buffer nicht ?

    Gruß



  • Elfe schrieb:

    Sound schrieb :

    ...Nachholbedarf an Basiswissen besteht...

    ...Woher soll man (ich) es denn haben, wenn es keine Bücher dazu gibt, auch im Internet nichts zu finden ist. Erklären tut es einem ja keiner.

    In Sachen Informatik/Programmierung wird dir selten jemand den Arsch nachtragen. Einen Großteil der Fehler/Fortschritte meistert man durch Eigenrecherche im Internet.

    Da gepostete Link bei dir nicht funktioniert, aber bei jedem anderen, scheinst du nicht nur ein Problem mit deiner Soundausgabe, sondern auch mit deinem Browser zu haben. Ich würde erstmal das zweite Problem angehen.



  • Elfe schrieb:

    ...Woher soll man (ich) es denn haben, wenn es keine Bücher dazu gibt, auch im Internet nichts zu finden ist.

    Natürlich gibt es Bücher dazu, und was ich in meinem letzten Beitrag geschrieben habe, stammt von hier. Habe ich mit Google gefunden. Aber dein selektiv kaputtes Internet lässt dich wahrscheinlich nicht darauf zugreifen.

    Elfe schrieb:

    nur beschweren tun sich alle, wenn man etwas nicht weiß.

    Der Unmut hier rührt daher, dass du dich hier sehr beratungsresistent gezeigt hast. Du schreibst, dass du mit D3D und DMusic keine Probleme hast, aber dein Code zeigt deutlich, dass das nicht sein kann. Dein Internet funktioniert seltsamerweise genau dann nicht, wenn es um den Zugriff auf die Dokumentation genau der von dir verwendeten Funktionen geht. Du zeigst trotz mehrfacher Aufforderung den Code nicht, mit wirren Begründungen.

    Dein seltsames Verhalten verhindert schnelle und effektive Hilfe. Daher vergeht den Helfern allmählich die Lust. Dass du darauf nicht mit einem Fünkchen Einsicht, sondern nur mit selbsgerechter Empörung reagierst, setzt noch eins oben drauf.

    Elfe schrieb:

    Wenn das kein Erfolg ist ?!?!

    Keine Ahnung, ob das ein Erfolg ist. Wenn alle Aufrufe mit S_OK zurückkommen und dein Programm trotzdem nicht tut, was es soll, ist es kein Erfolg.

    Miss die Qualität deines Programms nicht daran, ob der Compiler 0 Fehler meldet, und auch nicht daran, ob keine Laufzeitfehler auftreten, sondern daran, ob es funktioniert.

    Elfe schrieb:

    Nur

    if ( Buffer ) Buffer->Release;
    

    erzeugt Zugriffsverletzungen. Warum das ?

    Auch das kann man zweifelsfrei nur beantworten, wenn man den Code sieht. Vermutlich ist Buffer an dieser Stelle uninitialisiert.



  • Mein FireFox Browser zeigt :

    Die Seite msdn.microsoft.com wurde nicht gefunden.
    Möglicherweise ist die Internet-Adresse (URL) nicht korrekt.

    Tipp
    Verwenden Sie die WEB.DE Suche - und probieren Sie es erneut!

    msdn microsoft com en-us library windows desktop microsoft directx_sdk idirectsound8 idirectsound8 createsoundbuffer(v=vs 85) aspx

    Letzte Suchanfragen

    Es wurden keine Anfragen gespeichert.

    und warum werft Ihr mir ein "Kaputtes Internet" vor ????????

    > mit D3D und DMusic keine Probleme hast

    Na ja, die Programme, die ich damit geschrieben habe funktionieren jedenfalls gut und fehlerfrei.

    > selbsgerechter Empörung...

    seht euch mal Eure Antworten an ............

    > Dein seltsames Verhalten...

    Ich wollte lediglich freundlich sein und möglichst in kein Fettnäpfchen treten.

    Aber hier scheint es ja wohl wirklich nur Missverständnisse zu geben.

    ..........................................
    ..........................................
    ..........................................



  • Elfe schrieb:

    und warum werft Ihr mir ein "Kaputtes Internet" vor ????????

    Niemand wirft es dir vor. Es ist eine sachliche Feststellung. Dein Internet ist kaputt, weil es die MSDN Library nicht erreichen kann. Das ist ziemlich merkwürdig, allerdings bist du anscheinend nicht gewillt, diesem Problem nachzugehen, sondern nimmst es hin. Gut, damit verbaust du dir die Möglichkeit, dir selbst Informationen zu beschaffen.

    Elfe schrieb:

    Na ja, die Programme, die ich damit geschrieben habe funktionieren jedenfalls gut und fehlerfrei.

    Ganz offen gesagt: Das glaube ich dir nicht. Dein Code zeigt, dass dein Ansatz, unbekannte API-Funktionen aufzurufen, darin besteht, für jeden Parameter eine unitialisierte globale Variable des gewünschten Typs zu erstellen. Diese Vorgehensweise kann nicht funktionieren. Wenn deine anderen Programme funktionieren, dann bist du dort entweder anders vorgegangen, oder hast sie nicht selbst geschrieben.

    Elfe schrieb:

    Aber hier scheint es ja wohl wirklich nur Missverständnisse zu geben.

    Mir scheint, dir ist die Diskussion über das Verhalten der Threadteilnehmer hier wichtiger als die Lösung deines Problems.

    Den Code hast du trotz Aufforderung mal wieder nicht gezeigt. Dafür drei Reihen mit Punkten. Was soll das? Das ist nicht freundlich. Das ist seltsam.


Anmelden zum Antworten