Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android JNI中共享Java和C之间的变量?_Android_Variables_Java Native Interface_Share - Fatal编程技术网

如何在android JNI中共享Java和C之间的变量?

如何在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操作系统-所以对此持保留态度-但是你可能会使用直接字节缓冲区。问题是要知道发生了什么事。您可以简单地轮询缓冲区,但这并不

在android JNI中,有没有一种方法可以立即与Java共享本机C变量

我想从客户机的C层接收数据,因为服务器是用C++编写的(涉及到struct read/write),并在一个数组变量中记录数据出现的情况,想在Java中检测该变量并做相应的操作,想知道这是否可能


我考虑写一个关于数据进入SD卡的文件,但是我最不想做的事情是什么,有什么提示吗?

我没有做过任何android操作系统-所以对此持保留态度-但是你可能会使用直接字节缓冲区。问题是要知道发生了什么事。您可以简单地轮询缓冲区,但这并不比使用JNI轮询值好多少


在常规java中,如果愿意冒险,人们可能会利用sun.misc.Unsafe类来实现这一点。我不确定android中是否存在该类,但这可能会有所帮助。

我最近遇到了这个问题,可以解决它。我有一个C++ QT Android项目,需要执行一些java代码(对于只能从Android SDK访问的东西)。为了实现这个目标,我必须在java和C++代码之间共享一些常数(让他们一起交谈,互相理解)。 以下是实现这一目标的可能解决方案:

  • 在创建时,将C++传递常数值赋给java对象(或者java调用C++时的方式)。但如果你有很多变量,这是不可能的
  • 有C++和java模块动态解析的配置文件。应该有效,但没有尝试
  • 在这两个地方声明变量……这主意不好,而且很难维护
  • 有C++和java 直接使用的“声明文件”(“包含”)
我终于让最后一个解决方案奏效了。这个想法是让一个java文件被C++和java使用(方法可能会工作,但我更像C++的家伙,所以这种方式对我来说更容易)。我们使用预处理器使这个java文件有效地被C++作为头文件包含!p> 下面是一个声明常量(整数和字符串)的Java文件(constants.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;
}