`
除了你无可取代
  • 浏览: 145111 次
  • 性别: Icon_minigender_1
  • 来自: 悲鸣洞穴
社区版块
存档分类
最新评论

JNI 调 C C++ 参数String

    博客分类:
  • java
阅读更多
首先编译java的类。 类中方法必须是 native
得到.class文件。
然后 javah HelloJni
得到 HelloJni.h 文件 这个文件是c c++的头文件。通过它可以调用c的dll工程

jni.h是jdk下面的 我的路径是E:\jdk5\include  里面的.h文件 dll工程都需要。

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloJni */

#ifndef _Included_HelloJni
#define _Included_HelloJni
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloJni
 * Method:    getInt
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_HelloJni_getInt
  (JNIEnv *, jobject, jint);

/*
 * Class:     HelloJni
 * Method:    getString
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_HelloJni_getString
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif






// org_danlley_jni_test_HelloJniTest.cpp: implementation of the org_danlley_jni_test_HelloJniTest class.   
//   
//////////////////////////////////////////////////////////////////////   
  
#include "HelloJni.h" 
#include <jni.h>   
#include <stdio.h>   

/*
 * Class:     HelloJni
 * Method:    getInt
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_HelloJni_getInt (JNIEnv *env, jobject  obj, jint i)
{
	 i*=i;   
    return i;
}


/*
 * Class:     HelloJni
 * Method:    getString
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_HelloJni_getString(JNIEnv * env ,jobject  obj, jstring prompt)
{
	
	const char* str;
    str = (*env)->GetStringUTFChars(env, prompt, 0);//调c写法
	
	//c++写法 str = env->GetStringUTFChars(prompt, 0);
	
    if(str == NULL) {

        return NULL; /* OutOfMemoryError already thrown */

    }

    (*env)->ReleaseStringUTFChars(env,prompt, str);


    //const char* tmpstr = "return string succeeded";

    return (*env)->NewStringUTF(env,str);
	
}




  下面附上我自己跑的工程。java工程 放在eclipes下面可以跑。
  参考博客:  http://www.iteye.com/topic/295776  Java JNI 编程进阶
   http://www.iteye.com/topic/304594  JNI技术实践小结
分享到:
评论

相关推荐

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

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

    Android使用jni调用c++/c方法详解

    以上append方法就是要调用c++/c中的方法。 JniTest是在Android.mk里约束好的,关于Android.mk的编写具体在后面详解。 3、使用javah -jni生成.h文件 编写好jni加载类之后,就要开始生成.h文件了,此文件相当于一个...

    详解C++的String类的字符串分割实现

    详解C++的String类的字符串分割实现 功能需求,输入一个字符串“1-2-3”切割出“1”、“2”、“3”。在Java下直接用String的split函数就可以了。c++下String没有直接提供这个函数,需要自己写。 网上给出的解决方案...

    JNI技术手册 c/c++调用java

    2) 如何将java传入的String参数转换为c的char*,然后使用? 57 3) 将c中获取的一个char*的buffer传递给java? 57 4) 不知道占用多少空间的buffer,如何传递出去呢? 58 五、 对JAVA传入数据的处理 58 1) 如果传入的是...

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

    Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载)... 55 1、实例一:在jni中调用标准c中自带的函数printf(): 57 2、实例二、调用c 语言用户定义的函数... 58 ...

    java通过jni和c++代码之间实现互相调用

    java通过jni和c++代码之间实现互相调用。范例包含获取java类的本地变量,传入arraylist,传入String和int等各种数据类型。

    jni简单使用

    java通过JNI调用c++的简单配置步骤, Java 通过JNI调用c++ 1.java代码: //package com.gjl.testjni; class HelloWorld { static { System.loadLibrary("HelloWorld"); } private native void print(); ...

    Android中C/C++调用Java代码

    Android中C/C++调用Java代码是通过Java Native Interface(JNI)实现的。JNI提供了一种机制,允许Java代码和native代码之间相互调用。下面我们将详细介绍Android中C/C++调用Java代码的过程。 首先,我们需要了解JNI...

    android中使用jni对字符串加解密实现分析demo

    鉴于完全使用C/C++代码进行字符串的加解密,我们需要考虑不同系统平台上数据类型的差异问题,这里推荐另一种易于实现的方法,即使用Java中的AES加解密逻辑,而将AES加解密所需要的核心秘钥放入到C中,通过调用jni来...

    inline-jni:JNI到C ++包装器,旨在使JNI更加有用

    内联式JNI JNI到C ++包装器,旨在使JNI更加有用JNI功能的仅标头包装器,使从C ++执行Java代码的工作变得更轻松。 该库大量使用C ++ 11用户定义的文字,使用的最低GCC版本为4.8这是做什么用的? 最初,我使用它来实现...

    java jni 引用传参方法

    可传入引用参数类型为:句柄,string, int

    NDK_OpenCV_AndroidStudio:带有 AndroidStudio 的 NDK 和 OpenCV

    在 Android Studio 中使用 NDK 的步骤: 使用函数 getStringFromNative 创建类 NativeClass: ...在 c 文件夹(jni 文件夹)中创建“com_example_ndk_opencv_androidstudio_NativeClass.cpp”。 #include JNIEX

    HelloJni:Jni演示

    Jni(Java Native Interface )其实是Java平台与C/C++及其他语言交互的接口,基于Android SDK开发的应用用的事java语言,自然可以通过Jni调用C/C++代码满足一些特殊需求。 为了便于提高安卓平台JNI开发模式,...

    JMI:C ++ 11中的JNI现代接口

    支持JNI算术类型,JMI的JObject,C / C ++字符串以及这些类型的数组,作为方法参数类型,返回类型和字段类型 提供方便使用的常用函数: to_string(std::string) , from_string(jstring) , android::application() ...

    NDKC调用Java函数传参或获取变量

    NDK开发时,C/C++调用Java的函数的一些案例; 传递int类型参数: https://blog.csdn.net/niuba123456/article/details/80978500 传递String类型参数: https://blog.csdn.net/niuba123456/article/details/80978916 ...

    C/C++在Java、Android和Objective-C三大平台下实现混合编程

    一、为什么使用C/C++ 便于移植,用C/C++写得库可以方便在其他的平台上再次使用。 代码的保护,由于java层代码很容易被反编译,而C/C++库反汇难度较大。 提高程序的执行效率,将要求高性能的应用逻辑使用C/C++开发...

    一款java2c加固混淆工具 java转c 交叉编译.dll.so

    MYJ2C将编译的Java方法转换为C语言。编译生成的文件后,生成的二进制文件通过Java Native Interface 重新链接到原始程序。在此过程结束时,包含原始方法的.class文件中不会保留原始方法的信息。 Before public ...

    smjni:用于JNI的功能强大的轻量级C ++包装器

    用于JNI的功能强大的轻量级C ++包装器 目的 为JNI编写C ++代码非常困难,容易出错且不安全。 该库的目的是使其变得简单和安全。 它针对两个主要场景 从C ++调用Java代码 在C ++中实现本机Java方法 该库采用的方法...

    fbjni:一个旨在简化Java本机接口使用的库

    Facebook JNI帮助程序库旨在简化。 辅助程序的实现是为了简化跨平台移动代码在Android上的集成,但设计中没有Android细节。 它可以与任何支持JNI的Java VM一起使用。 struct JMyClass : JavaClass&lt;JMyClass&gt; { ...

Global site tag (gtag.js) - Google Analytics