java - 错误:JNINativeMethod nfptr 抛出从 jobjectarray* 到 void* 的无效转换
问题描述
我有以下简单的 jni 应用程序:
jobjectArray ListItems(JNIEnv *env, jobject self, jstring library)
{
jclass c = env->FindClass("java/lang/String");
jobjectArray a = env->NewObjectArray(2, c, 0);
env->SetObjectArrayElement(a, 0, env->NewStringUTF("text1"));
env->SetObjectArrayElement(a, 1, env->NewStringUTF("text2"));
return a;
}
int main()
{
...
...*load and initialize Java VM and JNI interface*
...
JNINativeMethod m[1];
m[0].fnPtr = ListItems;
m[0].name = "listItems";
m[0].signature = "(Ljava/lang/String;)[Ljava/lang/String;";
env->RegisterNatives(myJavaClass, m, 1);
}
当我按如下方式编译代码时,它给了我“错误:从 jobjectarray* 到 void* 的无效转换”
g++ -I"JNI\include" -I"JNI\include\win32" test.cpp -o test.exe
解决方案
正如@Michael 所说,只需要一个 void* 铸造:
int main()
{
...
...*load and initialize Java VM and JNI interface*
...
JNINativeMethod m[1];
m[0].fnPtr =(void*) ListItems;
m[0].name = "listItems";
m[0].signature = "(Ljava/lang/String;)[Ljava/lang/String;";
env->RegisterNatives(myJavaClass, m, 1
}
推荐阅读
- r - 如何为整个数据框指定 pivot_wider?
- python-3.x - 将列表数组转换为 numpy-nd 数组的问题
- java - 等待 spring 集成流程完成
- c# - 将库中的数据绑定到 XAML
- ios - 如何防止不同 Swift 单元格的标签彼此重叠显示?
- javascript - 在 Angular 12 Chrome Debug 上调试 TS 文件
- node.js - Discord.js 猫鼬连接失败
- python - Django Forms:未应用选择元素上的属性?
- serilog - 用于 C# 的 Serilog,写入文件延迟 3 分钟
- javascript - setAttribute 不覆盖另一个类属性