`
jakartom
  • 浏览: 45863 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
最近访客 更多访客>>
社区版块
存档分类
最新评论

JNI的string参数传递问题

阅读更多

参考了别人的网上的代码,发觉微软在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 参数传递 Android 自定义对象

    本篇文章将深入探讨JNI中参数传递的基本数据类型、自定义对象以及系统对象。 一、基本数据类型的参数传递 在JNI中,基本数据类型如int、float、char等的传递相对简单。Java中的基本类型在C/C++中都有对应的类型。...

    JNI学习二:字符串参数传递与返回值

    在本示例中,我们关注的是JNI中的字符串参数传递和返回值处理,这对于那些需要在Java和C/C++之间进行深度集成的项目非常重要。 1. **JNI基本概念** JNI是Java平台提供的一个接口,它使得开发者可以编写本地方法...

    jni参数详解

    复杂类型的传递则需要使用JNI提供的函数,例如将一个String类型的参数传递给Java代码,需要使用JNI的GetStringUTFChars函数将String类型转换为C/C++类型,然后将其传递给Java代码。 三、JNI参数的使用 JNI参数的...

    JNI开发Java调用C传递int、String、Array类型参数

    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 调 C C++ 参数String

    通过JNI传递Java的String参数,需要注意几个关键点: 1. 使用 `GetStringUTFChars` 获取String的UTF-8编码,这是一个非引用计数的API,因此调用完成后需要调用 `ReleaseStringUTFChars` 来释放内存。 2. 如果处理...

    JNI中C和Java参数传递详细例子

    ### JNI中C和Java参数传递详解 #### 一、引言 Java Native Interface (JNI) 是Java平台标准的一部分,用于让Java代码与其他语言写的代码进行交互。本文将深入探讨在JNI环境中,C/C++和Java之间如何进行参数传递,...

    JNI与C++数据类型传递示例(包括ArrayList对象、ArrayList嵌套返回)

    一个C++(Ubuntu16.04+QT5.9.1)通过JNI,调用JAVA类及方法的示例。通过JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList<string>,ArrayList嵌套ArrayList<ArrayList<String>>等。

    JNI 调用(包含复杂对象传参)

    实现了jni 中java向vc dll传递list参数/String参数 对象的接口。vc代码可用vc6.0运行编译,java调用接口在src\common\CameraUtil.java里面。测试了好久才实现的(涉及到项目机密,部分资源文件没有上传,内部方法是...

    Jni中C++和Java的参数传递

    总结来说,JNI中的参数传递涉及以下步骤: 1. 在Java中定义与C++结构体匹配的类。 2. 使用`javah`生成C/C++头文件。 3. 在C++中实现本地方法,注意使用正确的JNI类型和函数来处理参数和返回值。 4. 转换C++数据类型...

    jni java传递对象到C

    在具体实践时,例如我们的示例`JniString3`,可能涉及到Java字符串对象`String`的传递。Java的`String`在JNI中可以转换为`jstring`类型。我们可以使用`GetStringUTFChars`获取字符串的UTF-8编码,或者使用`...

    android jni 传递对象的demo

    本示例"android jni 传递对象的demo"聚焦于一个特定的应用场景:在Java层和C/C++层之间传递对象。 首先,我们要理解在Java和C/C++之间传递对象的挑战。Java对象在JVM(Java虚拟机)中以引用的形式存在,而C/C++则不...

    JNI开发Java和C/C++互相传递List集合

    JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.csdn.net/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ ...

    Android studio JNI函数以及复杂对象传递

    在JNI中,传递基本类型(如int、float等)相对简单,直接通过参数即可。然而,处理复杂对象,如字符串、数组或自定义类,需要更多的步骤。对于Java字符串,我们可以使用`env->NewStringUTF`创建一个新的本地字符串,...

    Jni中C和Java的参数传递.doc

    总结一下,JNI 参数传递的关键点包括: 1. **类型映射**:Java 和 C++ 的数据类型不同,需要使用 JNI 提供的类型映射,如 `jint`、`jstring` 等。 2. **字段访问**:使用 JNI 的 `GetFieldID` 和 `GetObjectField`...

    Android APP 用interface 接口的形式对jni进行回调,实例测试

    在Android中,Java接口可以作为参数传递给JNI方法,这样就可以在C/C++代码中调用Java对象的方法。这种方式使得JNI层能够主动通知Java层某些事件的发生,增强了两者之间的通信能力。 1. 创建Java接口 创建一个Java...

    Jni中C++和Java的参数传递.pdf

    例如,我们可以定义一个`DiskInfo`类,包含一个字符串`name`和一个整型`serial`,然后声明一些本地方法来处理参数传递: ```java public class DiskInfo { public String name; public int serial; // 声明本地...

    JNI完全技术手册 带完整书签

    Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载...

    JNI-array-arg.rar_JNI-array-arg_jni_jni 数组_jni array

    这篇文档“JNI数组参数传递.docx”将深入探讨如何在JNI中有效地传递数组,包括输入参数和返回值。 首先,理解JNI的基本结构至关重要。JNI函数通常在C/C++中定义,然后通过Java的`native`关键字声明,最后通过`...

    JNI实战一:向Native层传递一个类,并从Native层返回一个类

    - Java对象可以转换为`jobject`,然后作为参数传递给本地方法。 - 例如,如果要传递一个`String`对象,先获取其`jobject`,然后在本地方法中可以使用`env->GetObjectClass()`获取对应的`jclass`,进一步获取其方法...

    android jni jstring

    1. **获取`jstring`对象**:在JNI方法中,你可以通过参数接收Java层传递的`jstring`对象,或者通过`env->NewStringUTF()`等函数创建新的`jstring`。 2. **转换为C字符串**:使用`env->GetStringUTFChars()`函数,...

Global site tag (gtag.js) - Google Analytics