私は周りを探索し、私はこの主題に対して百万の結果を見つけました。しかし、どのページも私を助けません。私は非常に共通の問題があると思います。私は、特にオーディオキューで作業するオーディオプログラミングで遊んでいます。私のプログラムの目的は、問題の説明には関係ありません。しかし簡単に言えば、C++コードからobjective-c関数を呼び出そうとするとエラーが発生します。 AudioRecorder.h:だからここにエラーが含まれている私のコードですC++コードから目的のC関数を呼び出す
#import <Foundation/Foundation.h>
@interface AudioRecorder : NSObject {
}
-(void)setup;
-(void)startRecording;
-(void)endRecording;
-(void)playAlarmSound;
@end
は、これは実装です:AudioRecorder.mm:私は省略
#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....");
}
"[自己playAlarmSound];"すべてうまくいく。 C++コードからこのObjective-C関数をどのように呼び出すのですか?
あなたが正しい:) – Joe
本当だった@mbehanが、私は、これはの方法ではありませんので、「自己」は不足している根本的な理由があると主張するだろうこれはCスタイルの関数ではありません。 Objective-Cオブジェクトはこの関数内で使用できます。つまり、 'self'はクラスのメソッドでのみ使用できます。 – Luke
私はそれが "Objective-Cメソッドにのみ存在し、それはCスタイルの関数である"と言っていると信じています。元々は、同じメッセージを伝えるはずです。 – Joe