从 Java 类调用C++方法?
Call C++ method from Java class?
我使用生成Xcode或Android项目的引擎制作应用程序,我主要使用Xcode进行项目。但是,我希望第一次使用Android Studio。
在生成的Android Studio项目中,我有一个PTServicesBridge
类,我可以在其中添加自己的代码,用于引擎之外的其他功能。(在这种情况下,我需要将分数变量调整为1(。
PTServicesBridge Class:
public class PTServicesBridge
public static PTServicesBridge instance() {
if (sInstance == null)
sInstance = new PTServicesBridge();
return sInstance;
}
public static void initBridge(Cocos2dxActivity activity, String appId){
//some initialisations
}
//...
public static void adjustScoreUp(){
//I need to call a function from here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
}
该项目包含一个main.cpp
文件,其中包含我需要调用的方法。
主.cpp
#include "screens/PTPScoreController.h"
using namespace cocos2d;
extern "C"
{
jint JNI_OnLoad(JavaVM *vm, void *reserved){
JniHelper::setJavaVM(vm);
return JNI_VERSION_1_4;
}
//...
void adjustScoreUpNow{
PTPScoreController::scores().points.addCurrent(1); //This method <<<<<<<<<<
}
如何从PTServicesBridge
班拨打adjustScoreUpNow
?
编辑: 引擎支持告诉我这样做。我希望有一个简单的解决方案可以从 Java 类调用 .cpp 方法。
在PTServicesBridge
中定义本机 java 函数。像这样:
private static native void adjustScoreUpNow();
在main.cpp
提供以下实现
extern "C" {
JNIEXPORT void JNICALL Java_<full_package_name>_PTServicesBridge_adjustScoreUpNow(JNIEnv *env, jclass clazz) {
//Call native side conterpart
adjustScoreUpNow();
}
}
其中<full_package_name>
应该是带有_
的PTServicesBridge
的包名,而不是.
。
有关 JNI 工作原理的更多信息,请查看文档。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 初始化具有非默认构造函数的std::数组项的更好方法