2013-03-07 17 views
2

我需要將一個obj-C源文件從.m更改爲.mm才能訪問某些C++類。 只要我這樣做,AudioFileGetProperty()& AudioFileReadPackets()報告「無匹配函數調用」錯誤。AudioFileGetProperty - 在.mm源文件中沒有匹配的函數調用,但在.m中確定?

如果我將它從一個方法移出實現外的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

+0

請顯示一些代碼。你絕對可以在C++中使用C函數。 – sbooth 2013-03-08 02:30:16

回答

2

你給一些變量類型錯誤,請使用以下替換的:

UInt32 dataSize, numBytesRead, packetsRead; 
UInt64 packetCount; 

當作爲編譯。 m文件它會給你一個警告,說它是錯誤的類型(至少在默認的編譯器設置下),它看起來似乎是.mm更爲嚴格,因此會給你一個錯誤。

+0

謝謝,就是這樣:) – 2013-03-15 20:22:58