有没有办法在
Android JNI中使用Java立即共享本机C变量?
我想从客户端的C层接收数据,因为服务器是用C语言编写的(包含结构读/写),并在数组变量中记录数据即将发生的情况,并想在Java中检测该变量并执行相应的操作,想知道这是否可能?
解决方法
我最近有这个问题,可以解决它.我有一个C Qt Android项目需要执行一些java代码(只能从Android SDK访问).为了实现这一点,我必须在我的java和C代码之间共享一些常量(让它们一起交谈并相互理解).
以下是实现此目的的可能解决方案:
>在创建时让C将常量值传递给Java对象(或者如果Java调用C,则将其传递给Java对象).但是如果你有很多变数那就很难过了.
>让C和Java模块动态解析配置文件.应该工作,但没有尝试.
>在两个地方声明变量……糟糕的想法和难以维护
> C和Java都有一个直接使用的声明文件(‘included’)
我终于做了最后的解决方案.我的想法是让C和Java都使用一个java文件(这种方式可能有用,但我更像是一个C人,所以这对我来说更容易).我们使用预处理器使这个java文件有效,被C包含为头文件!
下面是一个Java文件(constants.java)声明常量(整数和字符串)的示例:
package name1.name2.name3; import java.lang.String; class MyConstants { public static String THE_NAME() { return "Name"; } public static Integer THE_VALUE() { return 12; } };
从任何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
预处理器然后将constants.java文件更改为这个有效的C头文件(主要的困难是获取包和导入行,因为你不能在宏名称中使用点….必须是恶意的):
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; } };
在这里,您将使用C中的常量!
int main() { cout << MyConstants::THE_NAME() << MyConstants::THE_VALUE() << endl; return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。