javajni调用的完全手册内容摘要:
seStringUTFChars(s, str)。 } The Java JNI wrapper would be class JavaHowTo { public native void sayHello()。 static { (javahowto)。 } } And finally, to use it public class JNIJavaHowTo { public static void main(String[] args) { JavaHowTo jht = new JavaHowTo()。 ()。 } } Java:JNI 调用资料整理 WSY 2020115 更新 Java和 C互操作的异常问题处理 Java 中需要调用 C 代码, C 代码中反过来又会操作 Java 中的对象,这就需要在 C 代码中处理 Java操作可能出现的异常。 如果不进行处理,一旦发生异常, C 代码部分就会直接退出,同时抛给调用它的 Java代码一个莫名其妙的错误(可能是一个没有任何意义的 Exception)直接看这个错误是无法分析真正的错误原因的。 所以 C 代码中必须要处理这些异常,要么将其抛出,要么忽略掉。 下面是专用的 JNI 函数,可以对异常进行处理。 Throw():丢弃一个现有的异常对象;在固有方法中用于重新丢弃一个异常。 ThrowNew():生成一个新的异常对象,并将其丢弃。 ExceptionOccurred():判断一个异常是否已被丢弃,但尚未清除。 ExceptionDescribe():打印一个异常和堆栈跟踪信息。 ExceptionClear():清除一个待决的异常。 FatalError():造成一个严重错误,不返回。 在所有这些函数中,最不能忽视的就是 ExceptionOccurred()和 ExceptionClear()。 大多数 JNI 函数都能产生异常,而且没有象在 Java 的 try 块内的那种语言特性可供利用。 所以在每一次 JNI 函数调用之后,都必须调用 ExceptionOccurred(),了解异常是否已被丢弃。 若侦测到一个异常,可选择对其加以控制(可能时还要重新丢弃它)。 然而,必须确保异常最终被清除。 这可以在自己的函数中用ExceptionClear()来实现;若 异常被重新丢弃,也可能在其他某些函数中进行。 举个最简单的例子,如果调用 Java 中的方法后出现异常,忽略。 jobject objectAttr = (*env)CallObjectMethod(env, objectDocument, createAttributeMid, stoJstring(env, ABC))。 // deal with exception exc = (*env)ExceptionOccurred(env)。 if(exc) { (*env)ExceptionClear(env)。 doSomething()。 } Java与 C\C++之间通过 JNI传递中文字符串 Java 与 C 之间通过 JNI 传递中文字符串 简介 本文提供一个具体的实例 ,说明 Java 和 C 之间通过 JNI 传递含有中文字符串的参数 ,解决中文乱码问题(双字节或多字节乱码)。 本文给出具体的源代码,对源代码进行了解释, C 部分提供了 C 和 C++两种方式实现的完整代码。 并且所有代码均在实验环境下测试通过。 本文读者须对 Java 和 C(或 C++)有一定的基础知识。 Java:JNI 调用资料整理 WSY 2020115 更新 实验环境 Windows XP (或 Windows2020) Microsoft VisualC++ 安装好 j2sdk 后需要设置环境变量 CLASSPATH=.。 C:\\bin。 C:\\lib\。 C:\\lib\。 C:\\lib\htmlc( j2sdk 安装在 c:\ 目录下) 源代码及代码说明 Java 代码: /* * * By dpwu * : */ public class javactransfer { public String hypotenuse(String send_buf,String recv_buf,int errno) { return hypotenuse0(send_buf,recv_buf,errno)。 } private native String hypotenuse0(String send_buf,String recv_buf,int errno)。 static { (javactransfer)。 //调用 dll } public static void main( String[] args ) { javactransfer obj= new javactransfer()。 ()。 ()。 ( begin!)。 ()。 ()。 String javasend=发送中文 chinese!。 ( java send:+[+javasend+])。 String javarecv=(teststr,javasend,1)。 //javasend 传含有中文字符串给 C //javarecv 接受 C 含有中的文字符串 ( java recv:+[+javarecv+])。 ()。 ()。 ( end!)。 } Java:JNI 调用资料整理 WSY 2020115 更新 } C 实现代码为: /* * * By dpwu * : */ include include //通过 javah –jni javactransfer 生成 include include include char* jstringToWindows( JNIEnv *env, jstring jstr )。 jstring WindowsTojstring( JNIEnv* env, char* str )。 JNIEXPORT jstring JNICALL Java_javactransfer_hypotenuse0(JNIEnv *env,jobject obj,jstring send_buf,jstring recv_buf,jint errno) { char * Buf_Return。 Buf_Return = (char*)malloc(1024)。 const char * recvtest = jstringToWindows( env, recv_buf )。 /*上句 recvtest 接收 Java 传过来的中文字符串正确 ,如果改为下句 ,则出现乱码 : const char * recvtest = (*env)GetStringUTFChars( env,recv_buf,0)。 */ printf( c recv :[%s]\n , recvtest)。 sprintf(Buf_Return,接收 中文 chinese!)。 printf( \n\n\n c send :[%s]\n , Buf_Return)。 recv_buf = WindowsTojstring(env ,Buf_Return)。 /*上句 recv_buf 传 windows 本地 C 中含有中文字符串给 Java 正确。 如果改为下句出现乱码 : recv_buf = (*env)NewStringUTF( env, Buf_Return )。 */ return recv_buf。 } char* jstringToWindows( JNIEnv *env, jstring jstr ) { int length = (*env)GetStringLength(env,jstr )。 const jchar* jcstr = (*env)GetStringChars(env,jstr, 0 )。 char* rtn = (char*)malloc( length*2+1 )。 Java:JNI 调用资料整理 WSY 2020115 更新 int size = 0。 size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)jcstr, length, rtn,(length*2+1), NULL, NULL )。 if( size = 0 ) return NULL。 (*env)ReleaseStringChars(env,jstr, jcstr )。 rtn[size] = 0。 return rtn。 } jstring WindowsTojstring( JNIEnv* env, char* str ) { jstring rtn = 0。 int slen = strlen(str)。 unsigned short* buffer = 0。 if( slen == 0 ) rtn = (*env)NewStringUTF(env,str )。 else { int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 )。 buffer = malloc( length*2 + 1 )。 if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) 0 ) rtn = (*env)NewString( env, (jchar*)buffer, length )。 } if( buffer ) free( buffer )。 return rtn。 } 若 , 均放在 d:\javac 目录下, 然后执行 (此处图片不能上传) javac :编译 java 源代码。 javah –jni javactransfer :生成头文件。 cl Ic:\\include Ic:\\include\win32 LD 通过 Microsoft Visual C++将 C 源代码生成 dll文件,供 java 调用。 执行结果如下: (此处图片不能上传) 执行键入: java javactranfer C++实现代码为 : /* * * By dpwu * : */ Java:JNI 调用资料整理 WSY 2020115 更新 include include //通过 javah –jni javactransfer 生成 include include include char* jstringToWindows( JNIEnv *env, jstring jstr )。 jstring WindowsTojstring( JNIEnv* env, char* str )。 JNIEXPORT jstring JNICALL Java_javactransfer_hypotenuse0(JNIEnv *env,jobject obj,jstring send_buf,jstring recv_buf,jint _tperrno) { char * Buf_Return。 Buf_Return = (char*)malloc(1024)。 const char * ctest = jstringToWindows( env, recv_buf )。 /* 如果把上句改为下句, C 接收 Java 字符串时将出现乱码:。javajni调用的完全手册
相关推荐
都必须受到追究。 第十条 对党员的纪律处分种类: (一)警告; (二)严重警告; (三)撤销党内职务; (四)留党察看; (五)开除党籍。 第十一条 对严重违犯党纪的党组织的纪律处理措施: (一)改组; (二)解散。 第十二条 党员受到警告或者严重警告处分,一年内不得在党内提升职 14 务和向党外组织推荐担任高于其原任职务的党外职务。 第十三条 撤销党内职务处分
提高人员素质,健全规章制度,建立质量管理体系并持续改进,从而使产品质量和服务质量稳定提高,深受消费者喜爱。 质量安全管理手册第 15 页 共 67 页第 1 页 共 67 页杭州建德沁心食品饮料有限公司 Q/QX—ZS—01质量安全管理手册 版 本: A 持 有 者: 分 发 号:凑卸洲宣贤祟蔚芝版
使 a) 被投资企业应于其股东会会议审议通过利润分配方案后 2 个月内支付应分配给公司的股利。 b) 资本运营部 根据各被投资企业股东会决议制作股利分配明细表,转交 财务管理部。 c) 财务管理部 根据该表核查股利分配到账情况,并负责向未按时分配股利的被投资企业催缴股利。 . 股权投资信息管理 1) 为了能够及时掌握被投资企业的经营管理状况, 资本运营部 应建立公司股权投资信息档案。
斑济盔捻译烯屹已挛谋戊赠合问份行秉蒸翁庞腊遁芹埠 第六章 图纸(见另册) 桃源县东街污水提升泵站新建工程施工招标 2桃源县东街污水提升泵站新建工程施工招标招 标 文 件招标编号: CDZX2020- 1218 湖南创迪工程管理咨询有限公司二 ○○九年十二月 37 目 录投标须知及投标须知前附表 ………………………………1
D 网域 E 网域F 网域电信网通电信服务 1 服务 2服务 3移动网通移动 图 2 多网域 ,多线路 系统功能 基础管理功能 平台整体界面 海康威视 IVMS8700 安防综合 管理平台方案 BS 首页 主要 包含基础应用、视频应用、一卡通应用三个大模块。 资源管理 1) 组织机构的管理,包括组织机构的添加,删除,修改,支持组织机构和监控区域多层级管理。 2)
抗 粘钢 2 组( 10 人) 教学楼加固安全施工方案目 录第一章、总体概述:施工组织总体设想、方案针对性及施工段划分第二章、施工准备第三章、施工现场平面布置图和临时设施、临时道路布置图第四章、施工进度计划和各阶段进度的保证措施第五章、各分部项工程的施工组织设计及质量保证措施第六章、安页凑法股弊漫试宴扬雾惑 条穿绒谜凹愧芯葫迅糙澄恍艰徽赤泛威碌联轮瘴票妻陀闽淄吾戏熔务亏吕串活薛逆贤售袁