C++ Builder und Callback
-
Hallo,
Wie kann ich folgendes mit dem C++ Builder realisieren?
Ermittlung der vorhanden Soundausgabegeräte
Um mithilfe von DirectSound festzustellen welche Soundausgabegeräte - besser gesagt
welche nutzbaren Soundausgabetreiber - vorhanden sind, ist es erforderlich folgende
Callback Funktion zu definieren:BOOL CALLBACK DSEnumCallback( LPGUID lpGuid, LPCSTR lpcstrDescription, LPCSTR lpcstrModule, LPVOID lpContext );Der Name der Funktion ist beliebig - der Rest der Funktion muss identisch bleiben.
Die Funktion DirectSoundEnumerate ermittelt die installierten DirectSound Treiber.HRESULT WINAPI DirectSoundEnumerate(LPDSENUMCALLBACK lpDSEnumCallback, LPVOID lpContext );Jetzt kann man auch erkennen wozu man die vorher definierte Callback Funktion
benötigt - Die Adresse dieser Funktion wird hier übergeben. Die Callback Funktion wird
für jeden vorhanden DirectSound Treiber aufgerufen, außer die Callback-Funktion gibt
den Wert false zurück - dadurch wird das weitere aufrufen der Callback-Funktion
verhindert. Der Code in der Callback-Funktion ist auch beliebig - was man damit anstellt
ist Sache des Programmierers - z. B. könnte man immer den Wert true zurückgeben um
alle DirectSound Treiber zu ermitteln, die vorhanden sind oder vorzeitig durch
Rückgabe des Wertes false eine weitere Ermittlung der vorhanden
Soundausgabegeräte abbrechen, wenn man bereits ein geeignetes
Soundausgabegerät gefunden hat.
-
Hallo hermes,
ich weiß jetzt nicht so recht wo dich der Schuh drückt ich nehme an es geht um die CALLBACK:im H-File außerhalb der Klasse definiert
int (*TCPClientSend)(void*, char*, int); int TCPClientSENDEN(void*, char*, int);im CPP - File
int TCPClientSENDEN(void* handle, char* sendbuffer, int sbsize) { int i = -1; if (FlaeFluInterfaceForm->ClientSocket->Active) { i = FlaeFluInterfaceForm->ClientSocket->Socket->SendBuf( (void *) sendbuffer, sbsize); } return i; } // Weitergabe der Adresse // Funktion xdrrec_create ENCODE senden astrCliKompname = ClientSocket->Name; CliKompName = new char[64]; CliKompName = astrCliKompname.c_str(); TCPClientSend = TCPClientSENDEN; Files->xdrClientSend = xdrrec_create(iPuffergroesse, iPuffergroesse, CliKompName, NULL, TCPClientSend);Viel Erfolg
Evi48
-
Hallo evi48,
danke für Deine Antwort.
Da ich bisher nur mit dem Builder gearbeitet habe ist die direkte API Programmierung, dazu zählt ja die Geschichte mit Callback, ein wenig neu.
Wünsche Dir und allen Anderen hier im Forum einen guten Rutsch ins neue Jahr.