一个带类的c++接口封装成jni接口,demo
时间: 2023-12-01 16:04:05 浏览: 38
好的,以下是一个简单的示例代码:
```c++
#include <jni.h>
#include <iostream>
class Calculator {
public:
int add(int a, int b) {
return a + b;
}
};
extern "C" {
JNIEXPORT jlong JNICALL
Java_com_example_calculator_CalculatorWrapper_createCalculator(JNIEnv* env, jobject thiz) {
return reinterpret_cast<jlong>(new Calculator());
}
JNIEXPORT void JNICALL
Java_com_example_calculator_CalculatorWrapper_destroyCalculator(JNIEnv* env, jobject thiz, jlong ptr) {
auto calculator = reinterpret_cast<Calculator*>(ptr);
delete calculator;
}
JNIEXPORT jint JNICALL
Java_com_example_calculator_CalculatorWrapper_add(JNIEnv* env, jobject thiz, jlong ptr, jint a, jint b) {
auto calculator = reinterpret_cast<Calculator*>(ptr);
return calculator->add(a, b);
}
}
```
在这个示例中,我们定义了一个名为 `Calculator` 的 C++ 类,其中包含一个 `add` 方法,用于计算两个整数的和。然后,我们使用 `extern "C"` 关键字将这些方法包装为 JNI 接口。具体来说:
- `Java_com_example_calculator_CalculatorWrapper_createCalculator` 方法用于创建 `Calculator` 对象,并返回其地址。
- `Java_com_example_calculator_CalculatorWrapper_destroyCalculator` 方法用于销毁 `Calculator` 对象。
- `Java_com_example_calculator_CalculatorWrapper_add` 方法用于调用 `Calculator` 对象的 `add` 方法,并返回结果。
在这个示例中,我们假设使用者已经正确地将 `CalculatorWrapper` 类包装为了 JNI 接口,因此我们可以直接使用该类的方法。如果您需要了解如何将 C++ 类包装为 Java 类并使用 JNI 接口,请参阅相关文档或示例。