JNI 从C文件向Java文件传递多个参数
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文件传递多个参数的更多相关文章
- jni.h头文件详解二
作者:左少华 博客:http://blog.csdn.net/shaohuazuo/article/details/42932813 转载请注明出处:http://blog.csdn.net/shao ...
- jni.h头文件详解一
1.jni.h头文件路径: /usr/lib/jvm/jdk_1.6.0_43/include/jni.h 2.jni.h头文件组成分析图: 3.下面通过上图进行分析讲解jni.h头文件. 一. jn ...
- 【转】 jni.h头文件详解(二)
原文网址:http://blog.csdn.net/shaohuazuo/article/details/42932813 作者:左少华 博客:http://blog.csdn.net/shaohua ...
- JNI调用native方法出现 java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()异常的解决办法
昨天拿到JNI的Android工程Demo,然后把demo整合到开发的主线工程上,发现调用JNI方法一直抛同一个异常 java.lang.UnsatisfiedLinkError: XXXclass. ...
- Android的NDK开发(5)————Android JNI层实现文件的read、write与seek操作
1. 在Android的Java层实现文件的读写操作是非常简单的,可以参看之前写的博文:http://blog.csdn.net/conowen/article/details/7296121 在JN ...
- Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...
- JNI通过线程c回调java层的函数
1.参看博客:http://www.jianshu.com/p/e576c7e1c403 Android JNI 篇 - JNI回调的三种方法(精华篇) 2.参看博客: JNI层线程回调Java函数关 ...
- Linux学习心得之 jnlp的文件和java应用程序安全设置
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 jnlp的文件和java应用程序安全设置 1.前言2. jnlp的文件打开3.java应用程 ...
- 使用XML文件和Java代码控制UI界面
Android推荐使用XML文件设置UI界面,然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller,是模型(model)-视图(view)-控制 ...
随机推荐
- centOS 6.4 vsftpd 500 illegal port command
原先配置好的vsftpd突然不行了,不知为啥,感觉跟网络有关,这个网络总是有dns拦截的现象,..小公司.真烦人,用联通线路就没问题, 但同事就是连不上,我的笔记本却可以连接上..我的ubuntn,同 ...
- docker 挂在本地目录
docker run -i -t -v /home/:/opt/data jenkins /bin/bash 运行jenkins,把本地中的/home/ 挂载到虚拟机中的/opt/data/ ...
- c#语音
1.新建WinForm程序,项目名称命名为Speech. 2.在COM组件中添加SpeechLib的引用. using SpeechLib;//添加语音引用 添加一个文本框并将其重命名为txtCont ...
- $(window)和$(document)
注意:本次测试采用的jquery1.9.1的版本 1. $(window).scrollTop() 和$(document).scrollTop()得出的结果是一样的 2. $(window).h ...
- php学习,一个简单的Calendar(1)
材料取之深入PHP与JQuery开发,这本书实际上就是讲述一个活动日程表. 此文章适合从其它语言(如java,C++,python等)转到php,没有系统学习php,或者是php初学者,已经对程序有较 ...
- C#中线程的用法
通过委托的方式创建线程 static int sum(int x) { return x+x; { Func<int> a = sum; 创建一个新的线程格式:a.BeginInvoke( ...
- codeforces 278Div1 B题
虚拟参赛的时候没想到是线段树,看到很多人都过了,也蛮着急的. 首先用二分+线段树的方法更新DP[i]:它表示以A[i]为结尾可以最前到哪个位置: 再用线段树计算ans[i]:它表示当前i个A元素可以最 ...
- ios:如何将自己编写的软件放到真正的iPhone上运行(转)
想要将自己编写的软件放到真正的iPhone上去运行,首先你需要成为Apple Developer计划的成员.其次,你需要设置程序ID和认证书,在这之后你就可以在你指定的iPhone上运行你的程序了.下 ...
- 从小白进阶ubuntu高手的必经之路—命令
精选的十二个ubuntu下的命令,熟记于心,则能甩掉ubuntu小白标签,高手的伟岸形象焕然生发.一.管理员权限绝大部分情况下,命令的行为须要被赋予管理员权限才能执行.命令 sudo 作用:赋予当前命 ...
- Sprint5
进展:今天开始进行了登录界面的编写及实现. 燃尽图: 工作照: