如何在android JNI中共享Java和C之间的变量?
在android JNI中,有没有一种方法可以立即与Java共享本机C变量 我想从客户机的C层接收数据,因为服务器是用C++编写的(涉及到struct read/write),并在一个数组变量中记录数据出现的情况,想在Java中检测该变量并做相应的操作,想知道这是否可能如何在android JNI中共享Java和C之间的变量?,android,variables,java-native-interface,share,Android,Variables,Java Native Interface,Share,在android JNI中,有没有一种方法可以立即与Java共享本机C变量 我想从客户机的C层接收数据,因为服务器是用C++编写的(涉及到struct read/write),并在一个数组变量中记录数据出现的情况,想在Java中检测该变量并做相应的操作,想知道这是否可能 我考虑写一个关于数据进入SD卡的文件,但是我最不想做的事情是什么,有什么提示吗?我没有做过任何android操作系统-所以对此持保留态度-但是你可能会使用直接字节缓冲区。问题是要知道发生了什么事。您可以简单地轮询缓冲区,但这并不
我考虑写一个关于数据进入SD卡的文件,但是我最不想做的事情是什么,有什么提示吗?我没有做过任何android操作系统-所以对此持保留态度-但是你可能会使用直接字节缓冲区。问题是要知道发生了什么事。您可以简单地轮询缓冲区,但这并不比使用JNI轮询值好多少
在常规java中,如果愿意冒险,人们可能会利用sun.misc.Unsafe类来实现这一点。我不确定android中是否存在该类,但这可能会有所帮助。我最近遇到了这个问题,可以解决它。我有一个C++ QT Android项目,需要执行一些java代码(对于只能从Android SDK访问的东西)。为了实现这个目标,我必须在java和C++代码之间共享一些常数(让他们一起交谈,互相理解)。 以下是实现这一目标的可能解决方案:
- 在创建时,将C++传递常数值赋给java对象(或者java调用C++时的方式)。但如果你有很多变量,这是不可能的
- 在这两个地方声明变量……这主意不好,而且很难维护
#include <string>
using namespace std;
#define public public:
#define package struct mockup1 { int name3; };struct mockup2 { mockup1 name2; };int i1 =
#define name1 mockup2()
#define import struct mockup3 { int String; };struct mockup4 { mockup3 lang; };int i2 =
#define java mockup4()
#define String string
#define Integer int
#include "constants.java"
#undef public
#undef String
#undef package
#undef import
#undef java
#undef name3
这里,你的常量在C++中运行!p>
int main()
{
cout << MyConstants::THE_NAME() << MyConstants::THE_VALUE() << endl;
return 0;
}
intmain()
{
库特
struct mockup1 { int name3; };struct mockup2 { mockup1 name2; };int i1 = mockup2().name2.name3;
struct mockup3 { int String; };struct mockup4 { mockup3 lang; };int i2 = mockup4().lang.String;
class MyConstants
{
public: static string THE_NAME() { return "Name"; }
public: static int THE_VALUE() { return 12; }
};
int main()
{
cout << MyConstants::THE_NAME() << MyConstants::THE_VALUE() << endl;
return 0;
}