Warum, warum nur funktioniert der Sound nicht im CBuilder(6)...
-
Hi,
das liegt nicht zwingend am BCB. Welches OS verwendest du?<CreateSoundBuffer> funktioniert mit DX8 (bzw. die SDK8) nicht mehr ab Vista, sondern nur bis DX9 -> WinXP.
mfg
-
OS ?? Was ist das ??
Habe
BCB6
und
DX8 bzw 9 [ das DX8 DS-8 bleibt ja ]
auf WinXP...Gruß
-
OS = operating system = Betriebssystem
Hast du ja aber schon genannt.
-
Hm, ok, vielleicht solltest du mal ein bißchen Code hier posten.
Zumindest unter WinXP sollte CreateSoundBuffer funktionieren.Was ist der Returncode?
mfg
-
Elfe schrieb:
Vorwort:
....Erreicht habe ich :
-DirectSoundCreate8________erfolgreich
-CoInitialize_______________erfolgreich
-CoCreateInstance_________erfolgreich
-IDirectSound->Initialize_____erfolgreich
-QueryInterface____________erfolgreich-CreateSoundBuffer_________fehlgeschlagen X
-CreateBasicBuffer_________erfolgreich
...
P.S: CoInitialize sollte vor DirectSoundCreate erfolgen.
mfg
-
Hallo, Ihr da draußen,
habs probiert, das Problem bleibt.
ISnd- Create________geht
ISnd- CaptureCreate _gehtaber
Snd- BufferCreate________geht nicht
und
Snd- CaptureBufferCreate _geht nichtDas finde ich komisch. Ich komme an die Schnittstelle dran,
aber machen kann ich nichts damit.
Und ohne Buffer kann ich ja gar nichts machen.[ getestet hab ich mit if(FAILED( etc. ... ]
Gruß
frohe Weihnacht an Alle.....
-
Hi,
wie gesagt ohne Code und ohne genauen ReturnCode, also:Return code
DSERR_ALLOCATED
DSERR_BADFORMAT
DSERR_BUFFERTOOSMALL
DSERR_CONTROLUNAVAIL
DSERR_DS8_REQUIRED
DSERR_INVALIDCALL
DSERR_INVALIDPARAM
DSERR_NOAGGREGATION
DSERR_OUTOFMEMORY
DSERR_UNINITIALIZED
DSERR_UNSUPPORTEDWird man dir schwer helfen können. Nur "geht nicht" ist eine nicht so gute Beschreibung des Problems.
mfg und auch frohe Weihnachten
-
Wie komme ich an diesen "Return-Code" denn dran ? Das kenne ich nicht.....
Ich kenne bisher nur den bool if (FAILED(...Der Code ist halt genau der, der in der DX-Doku steht
( müsste ja eigentlich jeder von euch haben ... )
aber wenns sein muss, schreib ich den auch nochmal hier hin...[... wollte halt nur nicht sinnlos etwas hinschreiben, was ohnehin
jeder kennt ... ]
-> siehe : Regeln ... nur den notwendigen und sinnvollen Code angeben.Gruß
-
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_OWNEDDS-CaptureCreate______________ERROR_INVALID_PASSWORD (->obwohl als erfolgreich gemeldet)
CreateCaptureBuffer____________ERROR_DISK_CHANGEDas 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