我使用的是apple示例代码SpleakHere。在这段代码中有一个称为aqrecorder的cals,它是一个c类。我想把声音字节发送到一个objective-c对象。此对象通过udp发送数据。下面是im试图在c代码中执行objective-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)广告到类中,因此无法调用其函数。我尝试在任何地方(类内、类外、header.mm文件中)声明udp对象为void*…,但是没有任何东西可以编译…
虽然我不能添加一个对象来发送数据…我使用nsnptification来将数据从c对象移植到objective-c对象。
请帮忙
虽然我不能添加一个对象来发送数据…我使用nsnotification来将数据从c对象移植到objective-c对象

最佳答案

尝试将所有.m文件的扩展名更改为.mm
如果这样的话,那么你就有依赖性的问题了。如果Objto-C文件包含C++文件,那么Obj-C文件的扩展应该是.mm而不是.m。此外,如果这个objective-c文件现在包含在其他objective-c文件中,那么该文件的扩展名也应该是.mm

关于iphone - 将字节/数据从C类发送到Objective-C类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6383990/

10-16 11:47