首先编译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技术实践小结
分享到:
相关推荐
在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码调用本地(C/C++)代码,反之亦然。这对于性能敏感的应用、底层库的集成以及利用现有C/C++库是非常有用的。本教程将聚焦于如何在...
一个C++(Ubuntu16.04+QT5.9.1)通过JNI,调用JAVA类及方法的示例。通过JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList<string>,ArrayList嵌套ArrayList<ArrayList<String>>等。
在这里,`extern "C"`用于告诉编译器使用C语言的链接规则,`JNIEXPORT`和`JNICALL`是JNI定义的宏,用于指定函数的导出和调用约定。`JNIEnv *env`参数是JNI接口指针,用于访问JNI函数。`jobject`参数是Java对象的引用...
在JNI中,我们可以使用C++或C语言编写本地方法,这些本地方法可以直接访问和操作Java对象,包括传递参数和接收返回值。在涉及到C++和Java之间的参数传递时,有一些特定的规则和技巧需要注意。 首先,我们要理解Java...
JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.csdn.net/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ ...
JNI接口提供了大量的函数,让本地方法(C/C++代码)能够创建、访问和修改Java对象。要使用JNI,你需要定义一个Java类,该类包含一个 native 方法声明,然后使用`javah`工具生成对应的C/C++头文件。接下来,编写实现...
在本示例中,我们关注的是JNI中的字符串参数传递和返回值处理,这对于那些需要在Java和C/C++之间进行深度集成的项目非常重要。 1. **JNI基本概念** JNI是Java平台提供的一个接口,它使得开发者可以编写本地方法...
JNI是一个接口,它允许Java代码调用本地(非Java)方法,通常是C或C++编写的。这使得开发者可以在Java程序中利用已有的C/C++库,或者利用C/C++的高性能特性,例如处理I/O密集型任务或硬件交互。 在本例中,我们有两...
JNI,全称为Java Native Interface,是Java平台提供的一种标准接口,用于让Java代码能够直接调用本地(非Java)代码,如C++、C等语言编写的库。通过JNI,开发者可以在Java应用程序中利用已有的C++库,提升性能或实现...
在Java编程环境中,有时我们需要利用C或C++的高效性能来执行特定任务,这时我们可以借助Java Native Interface(JNI)来实现。JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。本示例DEMO将...
Java 通过 JNI 调用 C/C++ 实现动态库加载 Java Native Interface (JNI) 是 Java虚拟机(JVM)提供的一种接口,允许 Java 代码和本地代码(如 C/C++)之间的交互。通过 JNI,Java 程序可以调用 C/C++ 代码,实现 ...
在这个"通过JNI实现C++与JAVA相互调用之TCP编程"的示例中,我们探讨的是如何使用JNI来实现TCP通信,其中C++作为底层通信引擎,而Java则负责上层应用逻辑。 首先,TCP(Transmission Control Protocol)是一种面向...
Java通过JNI(Java Native Interface)调用C语言函数库是一种常见的技术实践,它允许Java程序直接与本地操作系统和硬件交互,提高性能或者利用已有的C/C++代码库。本资料"Java通过JNI调用C语言函数库的方法.zip"提供...
JNI,全称Java Native Interface,是Java平台中用于实现Java代码与其他语言(如C/C++)交互的关键技术。自Java 1.1起,JNI已成为Java平台的标准组成部分,它允许Java应用程序利用本地代码实现特定的功能,如访问操作...
本文将深入探讨在JNI环境中,C/C++和Java之间如何进行参数传递,特别关注于结构体的传递。 #### 二、JNI基础概念 在开始之前,我们先简要回顾一下JNI的基本概念: - **JNIEnv**: 一个指针,提供了JNI函数接口。 - *...
在Android中,Java接口可以作为参数传递给JNI方法,这样就可以在C/C++代码中调用Java对象的方法。这种方式使得JNI层能够主动通知Java层某些事件的发生,增强了两者之间的通信能力。 1. 创建Java接口 创建一个Java...
在Java中,JNI通常用于提升性能,访问操作系统特定功能,或是集成已有的C/C++代码库。 在Java中定义JNI方法时,需要使用`native`关键字声明。例如,我们可以定义一个`DiskInfo`类,包含一个字符串`name`和一个整型`...