在多个jni调用中保持某种c ++对象的存活 [英] keep some sort of c++ object alive over multiple jni calls

查看:308
本文介绍了在多个jni调用中保持某种c ++对象的存活的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的java代码将调用存在的c ++代码来解析文件。它会生成一个保存很多数据的对象。
我将调用jni的第二种方法来访问这些数据,
当我调用第二种方法时,我必须再次解析文件。这显然是正确的行为。

My java code will call the exist c++ code to parse the file. it will generate an object which keep many data. I will call the jni's second method to access such data, When I call the second method, I have to parse the file again. it is obviously the right behavior.

有没有办法解决这个问题?
BTW:我刚接触c ++。

Is there a way to handle this ? BTW: I am newly to c++.

推荐答案

我不确定我是否理解你的问题是正确的。但我想你想要做的是在多个jni调用上保持某种c ++对象的存活。

I am not sure if I understand your question correct. But I guess what you want to do is to keep some sort of c++ object alive over multiple jni calls.

你可以做多件事。首先解析文件并将c ++对象存储在全局变量中。这是最简单的解决方案,但不是很好。

You can do multiple things. First parse your file and store your c++ object in a global variable. This is the simplest solution but not a nice one.

您还可以将c ++对象的生命周期移动到java。

You can also move the life cycle of your c++ object into java.

jlong java_some_class_jni_method(...)
{
    .... parse your text file ....
    MyParseclass* cls = new MyParseclass(...);
    ....
    return (jlong) cls;
}

但请记住,您需要再次删除此本机c ++类。所以你需要一个jni方法,并确保调用它。

But keep in mind that you need to delete this native c++ class again. So you need a jni method to this and be sure to call it.

void java_some_calls_jni_method(..., jlong clsPtr)
{
    MyParseclass* cls = (MyParseclass*)clsPtr;
    ... do maybe do something with cls and access the data...
    delete cls; // do not use the jlong again in any call
}

BTW:这将是如果你发布一些代码,会更有帮助。但是我希望这里的伪代码能有所帮助。

BTW: It would be much more helpful if you would post some code. But I hope this pseudo code here helps a little.

这篇关于在多个jni调用中保持某种c ++对象的存活的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆