Неверное преобразование из ... Objective-C ++ - PullRequest
1 голос
/ 10 апреля 2011

Я только что сказал Xcode скомпилировать все как Objective-C ++, и теперь у меня возникают ошибки при приведении.

void audioRouteChangeListenerCallback (
                                       void                      *aInUserData,
                                       AudioSessionPropertyID    aInPropertyID,
                                       UInt32                    aInPropertyValueSize,
                                       const void                *aInPropertyValue
                                       ) {

    // Ensure that this callback was invoked because of an audio route change
    if (aInPropertyID != kAudioSessionProperty_AudioRouteChange) return;

    // This callback, being outside the implementation block, needs a reference to the MixerHostAudio
    //   object, which it receives in the inUserData parameter. You provide this reference when
    //   registering this callback (see the call to AudioSessionAddPropertyListener).
    TJUSimpleSequencer *lAudioObject = (TJUSimpleSequencer *) aInUserData;

    // if application sound is not playing, there's nothing to do, so return.
    if (NO == lAudioObject.isPlaying) {

        NSLog (@"Audio route change while application audio is stopped.");
        return;

    } else {

        // Determine the specific type of audio route change that occurred.
        CFDictionaryRef routeChangeDictionary = aInPropertyValue; // !!! invalid conversion from 'const void*' to 'const __CFDictionary*'

        CFNumberRef routeChangeReasonRef =
        CFDictionaryGetValue (
                              routeChangeDictionary,
                              CFSTR (kAudioSession_AudioRouteChangeKey_Reason)
                              ); // !!! invalid conversion from 'const void*' to 'const __CFNumber*'

Когда я пытаюсь использовать static_cast<CFDictionaryRef>(aInPropertyValue), я ничего не получаю. Как будто (что, вероятно, правда), я не использую это правильно.

1 Ответ

1 голос
/ 10 апреля 2011

Использовать обычное литье C?

CFDictionaryRef routeChangeDictionary = ( CFDictionaryRef )aInPropertyValue;

Редактировать 0:

Как насчет этого вызова функции (если вы уверены, что это номер:)

CFNumberRef routeChangeReasonRef =
    ( CFNumberRef )CFDictionaryGetValue ( ...

Редактировать 1:

Взгляните на Полное руководство по C ++ и список затем.

...