参考了别人的网上的代码,发觉微软在VS2005,VS2008中默认采用UNICODE编码其实对JNI也是很方便的,
输入参数转化为VC中的指针,不要用getStringUTFChars,这样直接就是UNICODE,和VC默认的直接符合,并且,中文也是UNICODE,
相当的匹配:
WCHAR* p = (WCHAR *)(env->GetStringChars(conn_name,0));
输出参数返回
jstring rtn = 0;
....
rtn = (env)->NewString( (jchar*)buffer, length );
buffer中也存储的是UNICODE,很方便,由于C++中指针的灵活,即指针可以被造型成指向任意类型,因而,指针的造型最不用担心,
也对于C的灵活有了更深入的认识.
另外,_T("allocat memory in"))在VC中可将此String转化为UNICODE.
sizeof(list);可用于计算struct的大小,不必担心uNICODE等,
还有VC WINAPI有些函数会传进去一个指针,一个字符串的长度,并且他们是往外带返回值的,那我怎么知道返回的字符串的真正
长度呢,用_tcslen()(UNICODE和ANSI通用)函数来判断函数返回的指针指向的字符串的真正长度.
分享到:
相关推荐
本篇文章将深入探讨JNI中参数传递的基本数据类型、自定义对象以及系统对象。 一、基本数据类型的参数传递 在JNI中,基本数据类型如int、float、char等的传递相对简单。Java中的基本类型在C/C++中都有对应的类型。...
在本示例中,我们关注的是JNI中的字符串参数传递和返回值处理,这对于那些需要在Java和C/C++之间进行深度集成的项目非常重要。 1. **JNI基本概念** JNI是Java平台提供的一个接口,它使得开发者可以编写本地方法...
复杂类型的传递则需要使用JNI提供的函数,例如将一个String类型的参数传递给Java代码,需要使用JNI的GetStringUTFChars函数将String类型转换为C/C++类型,然后将其传递给Java代码。 三、JNI参数的使用 JNI参数的...
JNI开发Java调用C传递int、String、Array类型参数; 详情参考: int类型: (https://blog.csdn.net/niuba123456/article/details/80959892) String类型(https://blog.csdn.net/niuba123456/article/details/80977247);...
通过JNI传递Java的String参数,需要注意几个关键点: 1. 使用 `GetStringUTFChars` 获取String的UTF-8编码,这是一个非引用计数的API,因此调用完成后需要调用 `ReleaseStringUTFChars` 来释放内存。 2. 如果处理...
### JNI中C和Java参数传递详解 #### 一、引言 Java Native Interface (JNI) 是Java平台标准的一部分,用于让Java代码与其他语言写的代码进行交互。本文将深入探讨在JNI环境中,C/C++和Java之间如何进行参数传递,...
一个C++(Ubuntu16.04+QT5.9.1)通过JNI,调用JAVA类及方法的示例。通过JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList<string>,ArrayList嵌套ArrayList<ArrayList<String>>等。
实现了jni 中java向vc dll传递list参数/String参数 对象的接口。vc代码可用vc6.0运行编译,java调用接口在src\common\CameraUtil.java里面。测试了好久才实现的(涉及到项目机密,部分资源文件没有上传,内部方法是...
总结来说,JNI中的参数传递涉及以下步骤: 1. 在Java中定义与C++结构体匹配的类。 2. 使用`javah`生成C/C++头文件。 3. 在C++中实现本地方法,注意使用正确的JNI类型和函数来处理参数和返回值。 4. 转换C++数据类型...
在具体实践时,例如我们的示例`JniString3`,可能涉及到Java字符串对象`String`的传递。Java的`String`在JNI中可以转换为`jstring`类型。我们可以使用`GetStringUTFChars`获取字符串的UTF-8编码,或者使用`...
本示例"android jni 传递对象的demo"聚焦于一个特定的应用场景:在Java层和C/C++层之间传递对象。 首先,我们要理解在Java和C/C++之间传递对象的挑战。Java对象在JVM(Java虚拟机)中以引用的形式存在,而C/C++则不...
JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.csdn.net/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ ...
在JNI中,传递基本类型(如int、float等)相对简单,直接通过参数即可。然而,处理复杂对象,如字符串、数组或自定义类,需要更多的步骤。对于Java字符串,我们可以使用`env->NewStringUTF`创建一个新的本地字符串,...
总结一下,JNI 参数传递的关键点包括: 1. **类型映射**:Java 和 C++ 的数据类型不同,需要使用 JNI 提供的类型映射,如 `jint`、`jstring` 等。 2. **字段访问**:使用 JNI 的 `GetFieldID` 和 `GetObjectField`...
在Android中,Java接口可以作为参数传递给JNI方法,这样就可以在C/C++代码中调用Java对象的方法。这种方式使得JNI层能够主动通知Java层某些事件的发生,增强了两者之间的通信能力。 1. 创建Java接口 创建一个Java...
例如,我们可以定义一个`DiskInfo`类,包含一个字符串`name`和一个整型`serial`,然后声明一些本地方法来处理参数传递: ```java public class DiskInfo { public String name; public int serial; // 声明本地...
Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载...
这篇文档“JNI数组参数传递.docx”将深入探讨如何在JNI中有效地传递数组,包括输入参数和返回值。 首先,理解JNI的基本结构至关重要。JNI函数通常在C/C++中定义,然后通过Java的`native`关键字声明,最后通过`...
- Java对象可以转换为`jobject`,然后作为参数传递给本地方法。 - 例如,如果要传递一个`String`对象,先获取其`jobject`,然后在本地方法中可以使用`env->GetObjectClass()`获取对应的`jclass`,进一步获取其方法...
1. **获取`jstring`对象**:在JNI方法中,你可以通过参数接收Java层传递的`jstring`对象,或者通过`env->NewStringUTF()`等函数创建新的`jstring`。 2. **转换为C字符串**:使用`env->GetStringUTFChars()`函数,...