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.


Anmelden zum Antworten