Răsfoiți Sursa

feat:本地方法基本数据类型的传递和返回

yangyi 1 săptămână în urmă
părinte
comite
a257a44f2a

+ 18 - 0
c/parameter/JNI_parameter.c

@@ -0,0 +1,18 @@
+#include "space_anyi_jni_parameter_BaseTypeTest.h"
+#include <stdio.h>
+int sum(int a,int b){
+    return a+b;
+}
+JNIEXPORT jint JNICALL Java_space_anyi_jni_parameter_BaseTypeTest_sum(JNIEnv *env, jobject object, jint val1, jint val2){
+    //jint类型直接当作int类型使用
+    int temp = sum(val1,val2);
+    jint result = temp;
+    return result;
+}
+JNIEXPORT jboolean JNICALL Java_space_anyi_jni_parameter_BaseTypeTest_booleanTypeTest(JNIEnv *env, jobject object, jboolean flag){
+    //jboolean类型当作unsigned char类型使用
+    unsigned char val = flag;
+    printf("%d\n",val);
+    //在C/C++中使用常量"JNI_TRUE"表示"true",常量"JNI_FALSE"表示"false"
+    return val ? JNI_FALSE : JNI_TRUE;
+}

BIN
c/parameter/JNI_parameter.o


BIN
c/parameter/JNI_parameter.so


+ 29 - 0
c/parameter/space_anyi_jni_parameter_BaseTypeTest.h

@@ -0,0 +1,29 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class space_anyi_jni_parameter_BaseTypeTest */
+
+#ifndef _Included_space_anyi_jni_parameter_BaseTypeTest
+#define _Included_space_anyi_jni_parameter_BaseTypeTest
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     space_anyi_jni_parameter_BaseTypeTest
+ * Method:    sum
+ * Signature: (II)I
+ */
+JNIEXPORT jint JNICALL Java_space_anyi_jni_parameter_BaseTypeTest_sum
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     space_anyi_jni_parameter_BaseTypeTest
+ * Method:    booleanTypeTest
+ * Signature: (Z)Z
+ */
+JNIEXPORT jboolean JNICALL Java_space_anyi_jni_parameter_BaseTypeTest_booleanTypeTest
+  (JNIEnv *, jobject, jboolean);
+
+#ifdef __cplusplus
+}
+#endif
+#endif

+ 20 - 0
src/main/java/space/anyi/jni/parameter/Main.java

@@ -0,0 +1,20 @@
+package space.anyi.jni.parameter;
+
+public class Main {
+    static {
+        System.load("/home/yangyi/JNI-learn/c/parameter/JNI_parameter.so");
+    }
+    public static void main(String[] args) {
+        BaseTypeTest baseTypeTest = new BaseTypeTest();
+        int sum = baseTypeTest.sum(1, 2);
+        System.out.println(sum);
+        boolean flag = baseTypeTest.booleanTypeTest(false);
+        System.out.println(flag);
+    }
+}
+class BaseTypeTest {
+    //定义一个有参数和返回值的native方法
+    native int sum(int val1,int val2);
+    //boolean类型的测试
+    native boolean booleanTypeTest(boolean flag);
+}