iosからc++の関数を呼び出す方法
ios側からc++の関数を呼び出したやり方を書きます。
まず、AppController.mmというファイルを作成しました。
AppControllerには、AppDelegateをstaticとして保持し、そのstaticオブジェクトを介して、
c++側の関数にアクセスするようにしました。
AppControllerクラス
// cocos2d application instance
static AppDelegate s_sharedApplication;
-(void)getBluetoothData:(NSString*)data uuid:(NSString*)uuid {
s_sharedApplication.getBluetoothData([data UTF8String],[uuid UTF8String]);
}
AppDelegate内で、c++側の関数にアクセスします。
void AppDelegate::getBluetoothData(std::string data,std::string uuid){
BaseScene* scene = dynamic_cast (Director::getInstance()->getRunningScene());
if(scene != NULL){
// 更新があったことを伝える
scene->getBluetoothData(data,uuid);
}
}
getRunningScene関数で、表示されているSceneを取り出し、c++側の関数を呼んでいます。
親クラスとしてBaseSceneを作り、呼び出したい関数を仮想関数にすることにより、子クラスのgetBluetoothDataが呼ばれるようにしました。
最後に、iosファイルのクラス内で、AppControllerの関数を呼び、c++側の関数を呼び出します。
AppController *con = (AppController*)[[UIApplication sharedApplication] delegate];
[con getBluetoothData(data,uuid)];