Отправка байтов / данных из класса C в класс Objective-C - PullRequest
3 голосов
/ 17 июня 2011

Я использую пример кода Apple SpleakHere . в этом коде есть вызов под названием AQRecorder, это класс C. Я хочу отправить звуковые байты объекту target-c, который у меня есть. этот объект отправляет данные через UDP. Вот функция, в которой я пытаюсь выполнить функцию target-c внутри кода c.

    void AQRecorder::MyInputBufferHandler(  void *                                  inUserData,
                                        AudioQueueRef                       inAQ,
                                    AudioQueueBufferRef                 inBuffer,
                                    const AudioTimeStamp *              inStartTime,
                                    UInt32                              inNumPackets,
                                    const AudioStreamPacketDescription* inPacketDesc)
{
AQRecorder *aqr = (AQRecorder *)inUserData;
try {
    if (inNumPackets > 0) {
        // write packets to file
        XThrowIfError(AudioFileWritePackets(aqr->mRecordFile, FALSE, inBuffer->mAudioDataByteSize,
                                         inPacketDesc, aqr->mRecordPacket, &inNumPackets, inBuffer->mAudioData),
                   "AudioFileWritePackets failed");
        aqr->mRecordPacket += inNumPackets;
        NSData* data=[NSData dataWithBytes:inBuffer->mAudioData length:inBuffer->mAudioDataByteSize];
      [(Udp*)udpp  sendData:data];
    }

    // if we're not stopping, re-enqueue the buffe so that it gets filled again
    if (aqr->IsRunning())
        XThrowIfError(AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL), "AudioQueueEnqueueBuffer failed");
} catch (CAXException e) {
    char buf[256];
    fprintf(stderr, "Error: %s (%s)\n", e.mOperation, e.FormatError(buf));
}

}

хотя функции NSData работают нормально, я не могу добавить свой объект (Udp) в класс и, следовательно, не могу вызвать его функции. я попытался объявить объект Udp везде (внутри класса, вне класса, заголовочный файл .mm, как void * ...), но ничего не скомпилируется ...

хотя я не смог добавить объект для отправки данных ... вместо этого я использовал NSNptification для переноса данных из объекта c в объект target-c.

помогите пожалуйста


хотя я не смог добавить объект для отправки данных ... вместо этого я использовал NSNotification для переноса данных из объекта c в объект target-c

Ответы [ 2 ]

3 голосов
/ 19 июня 2011

Попробуйте изменить расширение всех файлов .m на .mm.

Если это работает, значит, у вас проблема с зависимостями. Если файл Objective-C включает файл C ++, то расширение этого файла Obj-C должно быть .mm вместо .m. Более того, если этот файл Objective-C теперь включен в какой-либо другой файл Objective C, то расширение этого файла также должно составлять .mm.

0 голосов
/ 17 июня 2011

Проверьте тип файла. Выберите «Objective C ++ предварительно обработанный». Вы можете сделать в окне инспектора файлов на правой панели для XCode4 или же «Получить информацию» в контекстном меню файла для более старых версий XCode.

...