Methods AudioFileGetProperty-在.mm源文件中没有匹配的函数调用,但在.m中是否正常? 我需要从.m到.mm更改Obj-C源文件,以便访问一些C++类。 一旦执行此操作,AudioFileGetProperty()&AudioFileReadPackets()就会报告“无匹配函数调用”错误

Methods AudioFileGetProperty-在.mm源文件中没有匹配的函数调用,但在.m中是否正常? 我需要从.m到.mm更改Obj-C源文件,以便访问一些C++类。 一旦执行此操作,AudioFileGetProperty()&AudioFileReadPackets()就会报告“无匹配函数调用”错误,methods,core-audio,objective-c++,Methods,Core Audio,Objective C++,如果我把它从一个方法中移到实现外的一个C风格块中,或者重命名为.m,它就可以工作了 为什么我不能在.mm文件的方法中使用AudioFileGetProperty() - (SInt16*)loadSingleWAVBuffer:(NSString*)inName ofLength:(UInt32*)outLength { AudioFileID audioFileID; SInt64 dataSize, packetsRead, numBytesRead, storageSiz

如果我把它从一个方法中移到实现外的一个C风格块中,或者重命名为.m,它就可以工作了

为什么我不能在.mm文件的方法中使用AudioFileGetProperty()

- (SInt16*)loadSingleWAVBuffer:(NSString*)inName ofLength:(UInt32*)outLength
{
    AudioFileID audioFileID;
    SInt64  dataSize, packetsRead, numBytesRead, storageSize, packetCount;
    NSString *filePath = [NSString stringWithFormat:@"%@/%@%@%@", [[NSBundle mainBundle] bundlePath], self.lessonName, @"/Phrase Data/", inName];

    CFURLRef myFileURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)filePath, kCFURLPOSIXPathStyle, false);
    OSStatus    err = AudioFileOpenURL(myFileURL, kAudioFileReadPermission, 0, &audioFileID);
    AudioStreamBasicDescription asbd;
    UInt32 propSize = sizeof(asbd);
    AudioFileGetProperty(audioFileID, kAudioFilePropertyDataFormat,&propSize, &asbd);
    dataSize = sizeof packetCount;

    OSStatus result = AudioFileGetProperty(audioFileID, kAudioFilePropertyAudioDataPacketCount, &dataSize, &packetCount);
    packetsRead = packetCount;
    printf("File Opened, packet Count: %lld", packetCount);
    storageSize = 2 * packetCount; 
    SInt16* outBuffer = (SInt16*)malloc( storageSize);

    result = AudioFileReadPackets (audioFileID, false, &numBytesRead, NULL, 0, &packetsRead,  outBuffer);
    *outLength = packetsRead;
    return outBuffer;
}
我正在使用AudioToolbox框架,并包含了标题

#import <AudioToolbox/AudioToolbox.h>
#导入

我正在使用iOS 6.1 SDK构建,目标是iOS 6.0

如果为某些变量指定了错误的类型,请使用以下替换:

UInt32 dataSize, numBytesRead, packetsRead;
UInt64 packetCount;

当编译为.m文件时,它确实会警告您该文件的类型错误(至少在默认编译器设置中是这样),只是.mm似乎更严格,因此会给您一个错误。

请显示一些代码。你可以在C++中使用C函数。