【问题标题】:Sending bytes/data from C class to an Objective-C class将字节/数据从 C 类发送到 Objective-C 类
【发布时间】:2011-06-17 09:43:47
【问题描述】:

我正在使用苹果示例代码SpleakHere。在这段代码中有一个名为 AQRecorder 的类,它是一个 C 类。我想将声音字节发送到我拥有的objective-c 对象。此对象通过 udp 发送 dat。这是我试图在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) 添加到该类,因此无法调用它的函数。我尝试在任何地方声明 Udp 对象(类内,类外,头 .mm 文件,作为 void*...),但没有任何东西可以编译...

虽然我无法添加对象来发送数据...我使用 NSNptification 来将数据从 c 对象移植到 Objective-c 对象。

请帮忙


虽然我无法添加对象来发送数据...我使用 NSNotification 来将数据从 c 对象移植到 Objective-c 对象

【问题讨论】:

  • 那段代码乱七八糟,如果你想让人们不厌其烦地帮助你,麻烦格式化一下。

标签: iphone objective-c c core-audio


【解决方案1】:

尝试将所有.m 文件的扩展名更改为.mm

如果可行,则说明存在依赖性问题。如果一个 Objective-C 文件包含一个 C++ 文件,那么那个 Obj-C 文件的扩展名应该是 .mm 而不是 .m。此外,如果这个 Objective-C 文件现在包含在其他一些 Objective-C 文件中,那么该文件的扩展名也应该是 .mm

【讨论】:

    【解决方案2】:

    检查文件类型。选择“Objective C++ preprocessed”。 您可以在 XCode4 右侧面板上的文件检查器窗口中制作 或者 旧 XCode 版本的文件上下文菜单中的“获取信息”。

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2011-05-11
      • 2013-01-08
      • 2014-04-19
      • 2020-02-28
      相关资源
      最近更新 更多