编辑
2025-06-25
笔记
0

目录

Java 在加载和卸载动态库
JNI 注册本地函数

Java 在加载和卸载动态库

当动态库被加载时这个函数被系统调用

c
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) { JNIEnv *env = NULL; if ((*jvm)->GetEnv(jvm, (void **) &env, JNI_VERSION_1_4) != JNI_OK) return JNI_ERR; // my code... return JNI_VERSION_1_4; }

当动态库被卸载时这个函数被系统调用

c
JNIEXPORT void JNI_OnUnload(JavaVM* vm, void* reserved) { // my code ... }

JNI 注册本地函数

  1. 通过 FindClass() 查找 Java 中的 class 引用。
c
jclass clazz = (*env)->FindClass(env, "")
  1. 通过 RegisterNatives() 注册本地函数。
c
JNINativeMethod methods[] = { {"getText", "()Ljava/lang/String;", getText} }; (*env)->RegisterNatives(env, clazz, &methods, sizeof(methods)/sizeof((methods)[0]));
  1. 关于 RegisterNatives() 中的 JNINativeMethod 结构体。
c
typedef struct { const char* name; const char* signature; void* fnPtr; } JNINativeMethod; // name: 需要注册的 Java 函数名 // signature: 函数参数和返回值类型 // fnPtr: 需要注册的 C 函数指针

本文作者:菜鸟

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 许可协议。转载请注明出处!