http://blog.csdn.net/kenera/archive/2009/02/16/3895343.aspx
给了极大的指导。
说说我的操作过程吧
1 MyEclipse 里新建Java 项目......主要代码如下:
package com.isw2.jni;
public class JNIStudy {
{
System.loadLibrary("testJNI");//加载DLL 文件,后缀因为windows 和linux 不同这里由系判断
}
public native void display();//native 指明方法由项目以外的程序实现
public static void main(String[] args) {
JNIStudy study = new JNIStudy();
study.display();//使用
}
}
2 分别执行下面的命令。第二条用来获取com_isw2_jni_JNIStudy.h 文件。com_isw2_jni_JNIStudy.h在创建dll文件时会用到.
E:\work\JNIstudy\src>javac com/isw2/jni/JNIStudy.java
E:\work\JNIstudy\src>javah com.isw2.jni.JNIStudy
3新建C项目.复制com_isw2_jni_JNIStudy.h.之后生成 testJNI.dll
dll.h (复制com_isw2_jni_JNIStudy.h)如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_isw2_jni_JNIStudy */
#ifndef _Included_com_isw2_jni_JNIStudy
#define _Included_com_isw2_jni_JNIStudy
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_isw2_jni_JNIStudy
* Method: display
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_isw2_jni_JNIStudy_display
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
dllmain.c 如下:
#include <jni.h>
#include "dll.h"
#include <stdio.h>
//注意方法名 ,来源于 dll.h
JNIEXPORT void JNICALL
Java_com_isw2_jni_JNIStudy_display
(JNIEnv *, jobject)
{
printf("Hello word!\n");
printf("void com.isw2.jni.JNIStudy.display() \n");
return;
}
带参数的如下:
JNIEXPORT jstring JNICALL Java_com_isw2_jni_JNIStudy_display
(JNIEnv *env, jobject obj, jstring arg){
const char *nativeString = (*env)->GetStringUTFChars(env,arg, 0);
printf("dllmain.c run result %s", nativeString);
(*env)->ReleaseStringUTFChars(env,arg, nativeString);
return arg;
}
编译过程中需要jni.h 可以%JAVA_HOME%下面的 /include 中找到,加上win32中的 一起放到 D:\DEV-CPP\Include (dev-cpp 是我用的C++工具)下面.
之后 testJNI.dll 放到 C:\WINDOWS\system32 下面。再运行Java 代码结果就出来了.
分享到:
相关推荐
这个"linux-java调用c语言编译的so动态库-jni例子-简单计算器"是一个典型的示例,展示了如何利用JNI来创建一个Java应用程序,该程序能够调用C编写的动态链接库(.so文件)进行计算操作。 JNI是Java平台的一部分,它...
总结,C++库封装JNI接口实现Java调用C++涉及的主要步骤包括:声明Java中的本地方法,生成JNI头文件,编写C++实现,编译成库,最后在Java中加载并调用。这个过程需要理解Java和C++之间的数据类型转换,以及如何在两种...
这篇博客“JNI学习-C 调用Java”可能详细讲述了如何使用C语言通过JNI来调用Java的方法。 在Java中,JNI提供了一套接口,让本地(Native)代码可以访问Java对象、执行方法、操作数组等。首先,我们需要理解JNI的基本...
最近项目中需要使用JNI,所以研究了一下,其中遇到过不少问题,总结一下,让遇到同样问题的人...在C/C++中调用Java的方法一般分为五个步骤:初始化虚拟机、获取类、获取类的方法、创建类对象、调用方法和退出虚拟机。
假如有一个现有的 .dll/.so 文件,假如使用 JNI 技术调用,我们首先需要另外使用 C 语言写一个 .dll/.so 共享库,使用 SUN 规定的数据结构替换 C 语言的数据结构,调用已有的 ? dll/so 中公布的函数。 然后再在 Java...
本文将详细讲解在Android Studio 3.0中如何实现C++调用Java以及Java调用C++的过程。 首先,我们需要在Android Studio项目中配置NDK(Native Development Kit),它是Android用于编写和编译C/C++代码的工具集。在...
在这个“GMSSL的java调用(JNI库和调用实例).zip”压缩包中,我们主要探讨如何在Java环境中通过JNI(Java Native Interface)来调用GMSSL库,以便利用这些国密算法进行数据加解密和哈希运算。 首先,我们需要了解...
Java通过JNI(Java Native Interface)调用... - 示例应用:演示如何从Java调用本地方法的示例程序。 通过理解并实践这个项目,你可以深入掌握Java通过JNI调用C语言函数库的方法,为开发混合型Java应用打下坚实基础。
本文将详细探讨"android aes-jni Java和C互加解密"这个主题,它涉及到Android平台上的JNI(Java Native Interface)技术以及AES加密在Java和C语言之间的实现。 首先,AES是一种块密码,它对128位的数据进行加密,...
在Android开发中,有时我们需要利用Java Native Interface (JNI) 来调用C/C++的库,以实现一些高性能或者特定平台的功能,例如本案例中的串口Socket通讯和USB驱动。JNI是Java平台标准的一部分,它允许Java代码和其他...
首先,Jnidemo-master项目是一个关于JNI的实例教程,主要展示了如何通过JNI在Java中调用C/C++库。项目名称中的"3.17.final.ok"可能表示这是一个经过多次迭代、最终稳定版本的示例,适合初学者和有经验的开发者进行...
总的来说,Java调用C语言编写的本地库需要理解JNI和JNA的工作原理,以及它们如何处理数据类型转换、参数传递和本地库的加载。通过这些技术,开发者可以充分利用C/C++的性能优势,同时享受Java的平台独立性和高级抽象...
标题中的“JNA.jar-JNative.jar-dll创建-JAVA调用-VC调用”涉及到的是Java平台下通过JNI(Java Native Interface)的两种实现方式,JNA(Java Native Access)和JNative,来与C/C++编写的动态链接库(DLL)进行交互...
通过这个项目,开发者不仅可以学习到如何编写和使用JNI,还能了解到Java与本地代码的协同工作原理,这对于在性能要求高的场景下优化Java应用或者利用已有的C/C++库是非常有帮助的。 总结来说,"Jnidemo-master.3.17...
以下是一个完整的示例,展示了如何实现Java调用C的过程: 1. **编写带有native声明的方法的Java类** ```java public class JNI_Test { // 传入一个String类型的字符串并将字符串转化为char类型的字符串后在后台...
Android JNI(Java Native Interface)是Android系统提供的一种机制,它允许Java代码调用C/C++原生代码,同时也允许C/C++代码调用Java的方法。JNI在开发高性能、低级硬件交互、使用现有C库或者优化性能的关键部分时...
在这个"JNI,java调用c Demo"中,我们将探讨如何设置和使用JNI来让Java程序调用C代码。 首先,我们需要理解JNI的工作原理。JNI提供了一种接口,使得Java虚拟机(JVM)能够调用本地(native)代码,也就是非Java的...
本示例将讲解如何在Android Studio 2.3.3版本下,通过C语言调用Java方法。 首先,理解JNI的基本结构。在Java端,我们需要定义一个本地方法,即使用`native`关键字声明的方法。例如: ```java public class ...
本教程将深入讲解如何使用JNI在Java中调用C/C++的本地库。 首先,我们需要理解JNI的基本概念。JNI提供了一套接口,让Java虚拟机(JVM)能够调用本地方法,这些方法由C或C++编写,并编译成动态链接库(如Windows下的...