Prompt.java
public class Prompt {
static {
System.loadLibrary("Prompt");
}
public static void main(String[] args) {
Prompt p = new Prompt();
String input = p.getLine("Type a line: ");
System.out.println("User typed: " + input);
}
private native String getLine(String prompt);
}
Prompt.c
#include <jni.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Prompt
* Method: getLine
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_Prompt_getLine(JNIEnv * env, jobject obj, jstring str) {
}
#ifdef __cplusplus
}
#endif
解说
- 原生函数总是比Java中声明的方法多两个参数。
- 第一个参数:
JNIEnv *类型,是 JNIEnv 接口指针,指向一个地址,该地址包含了指向函数表的指针。
- 第二个参数:根据原生函数是否是 静态函数 而有所不同。
- 如果该原生函数不是 静态函数 ,则是
jobject,对应着调用该原生函数的 Java 对象,有点像 C++ 中的this指针。
- 如果该原生函数是 静态函数 ,则是
jclass,对应着调用该原生函数的 Java 类。
类型映射
-
boolean - jboolean
-
char - jchar
-
short - jshort
-
int - jint
-
long - jlong
-
float - jfloat
-
double - jdouble
其他
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。