
#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方法调用不是静态的?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)