【急!!高分求思路】Java应用与其链接的C库之间的通信

kigy 2010-10-20 01:53:37
Hi, 兄弟姐们:
我这边有个Android应用,称之为A, 其链接了一个C语言写的协议库,称之为B吧,B要与远程进行通信;

如果A要调用B提供的功能,这很简单,B只要暴露几个API给A调用就可以了。
但是问题是,如果反过来,B某些时候要主动通知A去做某些事,那该怎么做呢?对Java不是很熟悉,求解啊!

万分感谢!!!
...全文
46 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kigy 2010-10-20
  • 打赏
  • 举报
回复
我已经知道方法了,还是非常感谢楼上的参与。
贴上方法:

A.1.3 传递和使用Java对象
在前例中,我们将一个字串传递给固有方法。事实上,亦可将自己创建的Java对象传递给固有方法。
在我们的固有方法内部,可访问已收到的那些对象的字段及方法。
为传递对象,声明固有方法时要采用原始的Java语法。如下例所示,MyJavaClass有一个public(公共)字段,以及一个public方法。UseObjects类声明了一个固有方法,用于接收MyJavaClass类的一个对象。为调查固有方法是否能控制自己的自变量,我们设置了自变量的public字段,调用固有方法,然后打印出public字段的值。

class MyJavaClass {
public void divByTwo() { aValue /= 2; }
public int aValue;
}

public class UseObjects {
public static void main(String [] args) {
UseObjects app = new UseObjects();
MyJavaClass anObj = new MyJavaClass();
anObj.aValue = 2;
app.changeObject(anObj);
System.out.println("Java: " + anObj.aValue);
}
private native void
changeObject(MyJavaClass obj);
static {
System.loadLibrary("UseObjImpl");
}
}

编译好代码,并将.class文件传递给javah后,就可以实现固有方法。在下面这个例子中,一旦取得字段和方法ID,就会通过JNI函数访问它们。

JNIEXPORT void JNICALL
Java_UseObjects_changeObject(
JNIEnv * env, jobject jThis, jobject obj) {
jclass cls;
jfieldID fid;
jmethodID mid;
int value;
cls = env->GetObjectClass(obj);
fid = env->GetFieldID(cls,
"aValue", "I");
mid = env->GetMethodID(cls,
"divByTwo", "()V");
value = env->GetIntField(obj, fid);
printf("Native: %d\n", value);
env->SetIntField(obj, fid, 6);
env->CallVoidMethod(obj, mid);
value = env->GetIntField(obj, fid);
printf("Native: %d\n", value);
}
  • 打赏
  • 举报
回复
赶紧学jni吧
【资源说明】 基于vue+Springboot的网上书城与其对应的后台管理系统源码+sql数据+项目说明(高分毕设).zip 网上书城前台部分 # 预览图 * 1-1 商城主页 !["图裂了"](img/bookStorePage.png) 获取书籍信息并分页显示 * 1-2 收藏夹页面 !["图裂了"](img/collect.png) 读取用户收藏夹并显示 * 1-3 欢迎页 !["图裂了"](img/firstPage.png) * 1-4 登录页 !["图裂了"](img/loginPage1.png) !["图裂了"](img/loginPage2.png) * 1-5 注册页 !["图裂了"](img/registerPage.png) 网上书城后台管理部分 # 预览图 * 1-1 书籍管理页面 !["图裂了"](img/bookManage.png) 普通管理员实现书籍增删改查 * 1-2 信息录入页面 !["图裂了"](img/messageManage.png) 录入书籍信息及书籍封面 * 1-3 用户管理页面 !["图裂了"](img/userManage.png) 超级管理员实现用户增删改查 * 1-4 角色管理 !["图裂了"](img/roleManage1.png) !["图裂了"](img/roleManage2.png) 超级管理员实现角色增删查以及管理对应角色的菜单权限 * 1-5 菜单管理 !["图裂了"](img/menuManage.png) 超级管理员实现页面菜单的增删改查 使用技术 # 前端 * Vue: 渐进式JavaScript 框架。 * element-ui: 基于 Vue 2.0 的桌面端组件。 * axios:基于promise网络请,作用于node.js和浏览器中。 # 后端 * Springboot框架 * JWT:为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。 * Lombok:一个Java,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。 * MyBatis:基于Java的持久层框架。 * Mybatis-plus:MyBatis (opens new window)的增强工具。 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧