Çevreye baktım ve bu konuyla ilgili bir milyon sonuç buluyorum. Ama sayfaların hiçbiri bana yardım etmiyor. Bence çok yaygın bir sorunum var. Özellikle ses kuyrukları ile çalışan ses programlama ile uğraşıyorum. Programımın amacı problemi açıklamak için önemli değil. Ama kısaca: C++ kodundan bir objektif-c işlevini çağırmaya çalıştığımda bir hata alıyorum. AudioRecorder.h: Yani burada hata içeriyor benim kodudurC++ Code'dan bir Objective C işlevinin çağrılması
#import <Foundation/Foundation.h>
@interface AudioRecorder : NSObject {
}
-(void)setup;
-(void)startRecording;
-(void)endRecording;
-(void)playAlarmSound;
@end
Ve bu uygulamasıdır: AudioRecorder.mm: Ben ihmal
#import "AudioRecorder.h"
#include <AudioToolbox/AudioToolbox.h>
#include <iostream>
using namespace std;
@implementation AudioRecorder
static const int kNumberBuffers = 3;
...
static void HandleInputBuffer (void *aqData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp *inStartTime,
UInt32 inNumPackets,
const AudioStreamPacketDescription *inPacketDesc) {
AQRecorderState *pAqData = (AQRecorderState *) aqData;
if (inNumPackets == 0 &&
pAqData->mDataFormat.mBytesPerPacket != 0)
inNumPackets =
inBuffer->mAudioDataByteSize/pAqData->mDataFormat.mBytesPerPacket;
UInt32 size;
AudioQueueGetPropertySize (inAQ, kAudioQueueProperty_CurrentLevelMeter, &size);
char* levelMeterData = new char[size];
AudioQueueGetProperty (inAQ, kAudioQueueProperty_CurrentLevelMeter, levelMeterData, &size);
AudioQueueLevelMeterState* meterState = reinterpret_cast<AudioQueueLevelMeterState*>(levelMeterData);
cout << "mAveragePower = " << meterState->mAveragePower << endl;
cout << "mPeakPower = " << meterState->mPeakPower << endl;
delete levelMeterData;
[self playAlarmSound]; //<--- here I get the error: Use of undeclared identifier 'self'
if (pAqData->mIsRunning == 0)
return;
AudioQueueEnqueueBuffer (pAqData->mQueue, inBuffer, 0, NULL);
}
...
-(void)playAlarmSound {
NSLog(@"Alarmsound....");
}
"[öz playAlarmSound];" o zaman her şey iyi çalışıyor. Peki bu Objective-C işlevini C++ kodumdan nasıl ararım?
sınıf, C tarzı bir işlev olduğu için değil. Herhangi bir Objective-C nesnesi bu fonksiyon içerisinde kullanılabilir - sadece 'self' sadece bir sınıfın metotlarında kullanılabilir. – Joe
Doğru, ama bu bir yöntem değildir çünkü altta yatan nedeni 'self' eksik olduğunu iddia ediyorum @mbehan
– Luke"Ben sadece Objective-C yöntemlerinde var olan ve bir C stili işlevi olan" bir başlangıçta bir yazım hatası yazdığını ancak aynı mesajı iletmesi gerektiğini belirttim. – Joe