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)];
		
このエントリーをはてなブックマークに追加