android – 当使用本机C对象时,如何使JNI方法调用不是静态的?

android – 当使用本机C对象时,如何使JNI方法调用不是静态的?,第1张

概述我有以下JNI包装器C代码: #include "map_container.h"extern "C" { JNIEXPORT void JNICALL Java_com_map_Map_openMapNative(JNIEnv* env, jobject thiz, jstring path);};static map_container* map = NULL;void J 我有以下JNI包装器C代码:

#include "map_container.h"extern "C" {    JNIEXPORT voID JNICALL Java_com_map_Map_openMapNative(jnienv* env,jobject thiz,Jstring path);};static map_container* map = NulL;voID Java_com_map_Map_openMapNative(jnienv* env,Jstring path){  const char* filename_utf8 = env->GetStringUTFChars(path,false);  if ( mapvIEw )  {    delete mapvIEw;    mapvIEw = NulL;  }  mapvIEw = new map_container((char*)filename_utf8);  if (filename_utf8)  {    env->ReleaseStringUTFChars(path,filename_utf8);  }}

并将com.map.Map.openMapNative声明为static,这意味着我可以一次 *** 作一个地图.如何修改此C代码以使map_container * map变为非静态并且属于com.map.Map类的确切实例? map_container完全是C类,在Java中没有反射.

解决方法 我正在使用 SWIG来生成所有必需的包装器代码.您只需在接口定义文件中定义要包装的类和函数,然后让SWIG为您创建所有必需的C和Java代码.强烈推荐!手工编写JNI代码太过无聊且容易出错恕我直言.参见SWIG docs for Java,它非常易于使用. 总结

以上是内存溢出为你收集整理的android – 当使用本机C对象时,如何使JNI方法调用不是静态的?全部内容,希望文章能够帮你解决android – 当使用本机C对象时,如何使JNI方法调用不是静态的?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1128257.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存