JNI 从C文件向Java文件传递多个参数

时间:2022-06-18 14:21:33

JNI C主函数

 #include <jni.h>
#include <string.h>
#include <android/log.h>
#include "Provider.h"
#include "libCold_chain.h" JNIEnv* jniEnv; jint
Java_com_panasonic_communicationtest_StateConfirmFragment_openSerialDevice( JNIEnv* env, jobject thiz, jstring devName )
{
const char* devName_id = (*env)->GetStringUTFChars(env, devName, NULL);
if(jniEnv == NULL) {
jniEnv = env;
} return openSerialDevice(devName_id);
} jint
Java_com_panasonic_communicationtest_StateConfirmFragment_readSerialData( JNIEnv* env, jobject thiz )
{
long dataTest = ; if(jniEnv == NULL) {
jniEnv = env;
} jclass class;
jfieldID send_instruction_record;
jfieldID receive_instruction_record;
class = (*env)->GetObjectClass(env, thiz);
if (class == NULL)
{
return -;
}
send_instruction_record = (*env)->GetFieldID(env, class, "send_instruction_str", "Ljava/lang/String;");
receive_instruction_record = (*env)->GetFieldID(env, class, "receive_instruction_str", "Ljava/lang/String;");
if (send_instruction_record == NULL || receive_instruction_record == NULL)
{
return -;
} unsigned char* rcmdReq = malloc(*sizeof(jchar));
unsigned char* rcmdRes = malloc(*sizeof(jchar)); if(readSerialData(, , , &dataTest, , rcmdReq, rcmdRes) == ){ unsigned char* str1 = "hello fan sen!";
unsigned char* str2 = rcmdReq; jstring jstr1 = (*env)->NewStringUTF(env, str1);
jstring jstr2 = (*env)->NewStringUTF(env, str2);
__android_log_print(ANDROID_LOG_INFO, "ComTest", rcmdReq);
if(jstr1 == NULL || jstr2 == NULL){
return ;
}
(*env)->SetObjectField(env, thiz, send_instruction_record, jstr1);
(*env)->SetObjectField(env, thiz, receive_instruction_record, jstr2); return dataTest;
} return -;
} jint
Java_com_panasonic_communicationtest_StateConfirmFragment_closeSerialDevice( JNIEnv* env, jobject thiz, jint devFd )
{
if(jniEnv == NULL) {
jniEnv = env;
} return closeSerialDevice(devFd);
} // ===========================================
jint
Java_com_panasonic_communicationtest_ParameterSettingFragment_openSerialDevice( JNIEnv* env, jobject thiz, jstring devName )
{
const char* devName_id = (*env)->GetStringUTFChars(env, devName, NULL);
if(jniEnv == NULL) {
jniEnv = env;
} return openSerialDevice(devName_id);
} jint
Java_com_panasonic_communicationtest_ParameterSettingFragment_readSerialData( JNIEnv* env, jobject thiz, jint devFd, jchar unitno, jshort addr, jlong data )
{
if(jniEnv == NULL) {
jniEnv = env;
} unsigned char rcmdReq[];
unsigned char rcmdRes[]; return readSerialData(devFd, unitno, addr, data, , rcmdReq[], rcmdRes[]);
} jint
Java_com_panasonic_communicationtest_ParameterSettingFragment_writeSerialData( JNIEnv* env, jobject thiz, jint devFd, jchar unitno, jshort addr, jlong data )
{
if(jniEnv == NULL) {
jniEnv = env;
} unsigned char rcmdReq[];
unsigned char rcmdRes[]; return writeSerialData(devFd, unitno, addr, data, , rcmdReq[], rcmdRes[]);
} jint
Java_com_panasonic_communicationtest_ParameterSettingFragment_closeSerialDevice( JNIEnv* env, jobject thiz, jint devFd )
{
if(jniEnv == NULL) {
jniEnv = env;
} return closeSerialDevice(devFd);
} //--------------------------------------
jstring
Java_com_panasonic_communicationtest_StateConfirmFragment_getStringFromJNI( JNIEnv* env, jobject thiz, jstring address )
{
const char* address_id = (*env)->GetStringUTFChars(env, address, NULL);
if(jniEnv == NULL) {
jniEnv = env;
} // return getString(address_id);
return (*env)->NewStringUTF(env, address_id);
} jstring
Java_com_panasonic_communicationtest_ParameterSettingFragment_getStringFromJNI( JNIEnv* env, jobject thiz, jstring address )
{
const char* address_id = (*env)->GetStringUTFChars(env, address, NULL);
if(jniEnv == NULL) {
jniEnv = env;
}
return getString(address_id);
} jstring
Java_com_panasonic_communicationtest_ParameterSettingFragment_setStringIntoJNI( JNIEnv* env, jobject thiz, jstring address )
{
const char* address_id = (*env)->GetStringUTFChars(env, address, NULL);
if(jniEnv == NULL) {
jniEnv = env;
}
return setString(address_id);
}

JNI C代码

 extern long readSerialData(long devFd, unsigned char unitno, unsigned short addr, long *data, long timeout, unsigned char* rcmdReq, unsigned char* rcmdRes)
{
/*
* Test by fansen
*/ *data = ;
int m = ;
int n = ;
unsigned char test[] = ""; //{0xff,0x1f,0x07,0x08};
strcpy(rcmdReq, test); // rcmdReq = test;
// for(m = 0; m <= 8; m++){
// rcmdReq[m] = test[m];
// LOGI("test1: %c", test[m]);
// } LOGI(rcmdReq); // char test2[10] = {0xff,0x1f,0x07,0x08,0x00,0x87,0x00,0x01};
// __android_log_print(ANDROID_LOG_INFO, "ComTest", "Communication Test 2");
// for(n = 0; n <= 9; n++){
// rcmdReq[n] = test2[n];
// } return OK; /*
* Test over
*/

JNI 从C文件向Java文件传递多个参数的更多相关文章

  1. jni&period;h头文件详解二

    作者:左少华 博客:http://blog.csdn.net/shaohuazuo/article/details/42932813 转载请注明出处:http://blog.csdn.net/shao ...

  2. jni&period;h头文件详解一

    1.jni.h头文件路径: /usr/lib/jvm/jdk_1.6.0_43/include/jni.h 2.jni.h头文件组成分析图: 3.下面通过上图进行分析讲解jni.h头文件. 一. jn ...

  3. 【转】 jni&period;h头文件详解&lpar;二&rpar;

    原文网址:http://blog.csdn.net/shaohuazuo/article/details/42932813 作者:左少华 博客:http://blog.csdn.net/shaohua ...

  4. JNI调用native方法出现 java&period;lang&period;UnsatisfiedLinkError&colon; XXXclass&period;XXXmethod()异常的解决办法

    昨天拿到JNI的Android工程Demo,然后把demo整合到开发的主线工程上,发现调用JNI方法一直抛同一个异常 java.lang.UnsatisfiedLinkError: XXXclass. ...

  5. Android的NDK开发&lpar;5&rpar;————Android JNI层实现文件的read、write与seek操作

    1. 在Android的Java层实现文件的读写操作是非常简单的,可以参看之前写的博文:http://blog.csdn.net/conowen/article/details/7296121 在JN ...

  6. Eclipse、MinGW、JNI编写C&plus;&plus;生成dll&comma; Java端调用的完整示例&lpar;附java&period;lang&period;UnsatisfiedLinkError解决方法&rpar;

     Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...

  7. JNI通过线程c回调java层的函数

    1.参看博客:http://www.jianshu.com/p/e576c7e1c403 Android JNI 篇 - JNI回调的三种方法(精华篇) 2.参看博客: JNI层线程回调Java函数关 ...

  8. Linux学习心得之 jnlp的文件和java应用程序安全设置

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 jnlp的文件和java应用程序安全设置 1.前言2. jnlp的文件打开3.java应用程 ...

  9. 使用XML文件和Java代码控制UI界面

    Android推荐使用XML文件设置UI界面,然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller,是模型(model)-视图(view)-控制 ...

随机推荐

  1. 递归算法经典实例小结&lpar;C&num;实现&rpar;

     一 .递归算法简介 在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法. 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往 ...

  2. sql server 2012提示&colon;评估期已过 的解决办法 附序列号

    sql server 2012提示评估期已过的解决方法: 第一步:进入SQL2012配置工具中的安装中心. 第二步:再进入左侧维护选项界面,然后选择选择版本升级. 第三步:进入输入产品密钥界面,输入相 ...

  3. &lbrack;docker&rsqb; 管理docker容器中的数据

    之前我们介绍了Docker的基本概念(前面的没翻译...),了解了如何使用Docker镜像进行工作,并且学习了网 络和容器之间的链接.这一节我们将讨论如何管理容器中及容器之间的数据. 我们将查看下面两 ...

  4. &lpar;转&rpar;深入浅出 iOS 之生命周期

    原文:http://www.cocoachina.com/applenews/devnews/2011/0817/3129.html 深入浅出 iOS 之生命周期 发布于:2011-08-17 10: ...

  5. PHP-POSIX正则表达式函数

    1.ereg() 格式:ereg("条件",<原始字符串>) ereg()查找字符串,是严格区分大小写的 <?php $string="apples a ...

  6. 【转】shell 教程——01 Shell简介:什么是Shell,Shell命令的两种执行方式

    Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...

  7. hadoop笔记之hdfs shell操作

    HDFS命令行操作 HDFS命令行操作 (以下是hadoop 1.x 版本的命令使用) 装好hadoop之前首先要进行一个格式化 hadoop namenode -format 运行之后,可以将文件夹 ...

  8. 超赞的&period;NET办公软件库

    之前做项目无意中搜到这个站点,一開始以为是国外大牛们的杰作,然后看到联系地址中竟然是四川成都,喔...咱们中国人跟老美.印度人比起来也非常厉害啊. 这个站点一次性提供了word.excel.ppt.p ...

  9. Android应用开发:LoaderManager在Activity&sol;Fragment中的使用分析

    LoaderManager 外部接口initLoader:起始 public <D> Loader<D> initLoader(int id, Bundle args, Loa ...

  10. Android异步处理技术

    前言: 在移动端开发中,我们必须正确处理好主线程和子线程之间的关系,耗时操作必须在子线程中完成,避免阻塞主线程,导致ANR.异步处理技术是提高引用性能,解决主线程和子线程之间通信问题的关键. 通常在如 ...