`
zhouxianglh
  • 浏览: 267307 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JNI 学习-Java 调用C

    博客分类:
  • J2SE
阅读更多

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 代码结果就出来了.

 

  • JNI.rar (12.7 KB)
  • 下载次数: 5
分享到:
评论

相关推荐

    linux-java调用c语言编译的so动态库-jni例子-简单计算器

    这个"linux-java调用c语言编译的so动态库-jni例子-简单计算器"是一个典型的示例,展示了如何利用JNI来创建一个Java应用程序,该程序能够调用C编写的动态链接库(.so文件)进行计算操作。 JNI是Java平台的一部分,它...

    C++库封装JNI接口-实现java调用c++

    总结,C++库封装JNI接口实现Java调用C++涉及的主要步骤包括:声明Java中的本地方法,生成JNI头文件,编写C++实现,编译成库,最后在Java中加载并调用。这个过程需要理解Java和C++之间的数据类型转换,以及如何在两种...

    JNI学习-C 调用Java

    这篇博客“JNI学习-C 调用Java”可能详细讲述了如何使用C语言通过JNI来调用Java的方法。 在Java中,JNI提供了一套接口,让本地(Native)代码可以访问Java对象、执行方法、操作数组等。首先,我们需要理解JNI的基本...

    JNI------C语言调用Java

    最近项目中需要使用JNI,所以研究了一下,其中遇到过不少问题,总结一下,让遇到同样问题的人...在C/C++中调用Java的方法一般分为五个步骤:初始化虚拟机、获取类、获取类的方法、创建类对象、调用方法和退出虚拟机。

    JNI--java调用不同平台的动态链接库,dll,so,完美,全教程

    假如有一个现有的 .dll/.so 文件,假如使用 JNI 技术调用,我们首先需要另外使用 C 语言写一个 .dll/.so 共享库,使用 SUN 规定的数据结构替换 C 语言的数据结构,调用已有的 ? dll/so 中公布的函数。 然后再在 Java...

    Android Studio3.0开发JNI流程------C++调用Java以及Java调用C++,C++/Java互相调用

    本文将详细讲解在Android Studio 3.0中如何实现C++调用Java以及Java调用C++的过程。 首先,我们需要在Android Studio项目中配置NDK(Native Development Kit),它是Android用于编写和编译C/C++代码的工具集。在...

    GMSSL的java调用(JNI库和调用实例).zip

    在这个“GMSSL的java调用(JNI库和调用实例).zip”压缩包中,我们主要探讨如何在Java环境中通过JNI(Java Native Interface)来调用GMSSL库,以便利用这些国密算法进行数据加解密和哈希运算。 首先,我们需要了解...

    Java通过JNI调用C语言函数库的方法.zip

    Java通过JNI(Java Native Interface)调用... - 示例应用:演示如何从Java调用本地方法的示例程序。 通过理解并实践这个项目,你可以深入掌握Java通过JNI调用C语言函数库的方法,为开发混合型Java应用打下坚实基础。

    aes-jni-java和c互加解密

    本文将详细探讨"android aes-jni Java和C互加解密"这个主题,它涉及到Android平台上的JNI(Java Native Interface)技术以及AES加密在Java和C语言之间的实现。 首先,AES是一种块密码,它对128位的数据进行加密,...

    安卓串口Socket通讯USB驱动jni相关-Android调用JNI的简单实例附详细步骤.zip

    在Android开发中,有时我们需要利用Java Native Interface (JNI) 来调用C/C++的库,以实现一些高性能或者特定平台的功能,例如本案例中的串口Socket通讯和USB驱动。JNI是Java平台标准的一部分,它允许Java代码和其他...

    Jnidemo-master.3.17.final.ok.rar

    首先,Jnidemo-master项目是一个关于JNI的实例教程,主要展示了如何通过JNI在Java中调用C/C++库。项目名称中的"3.17.final.ok"可能表示这是一个经过多次迭代、最终稳定版本的示例,适合初学者和有经验的开发者进行...

    java调用C语言编写的so库中的函数,java调用C语言编写的dll库中的函数

    总的来说,Java调用C语言编写的本地库需要理解JNI和JNA的工作原理,以及它们如何处理数据类型转换、参数传递和本地库的加载。通过这些技术,开发者可以充分利用C/C++的性能优势,同时享受Java的平台独立性和高级抽象...

    JNA.jar-JNative.jar-dll创建-JAVA调用-VC调用

    标题中的“JNA.jar-JNative.jar-dll创建-JAVA调用-VC调用”涉及到的是Java平台下通过JNI(Java Native Interface)的两种实现方式,JNA(Java Native Access)和JNative,来与C/C++编写的动态链接库(DLL)进行交互...

    Jnidemo-master.3.17.final.ok(20200813.final.ok).zip

    通过这个项目,开发者不仅可以学习到如何编写和使用JNI,还能了解到Java与本地代码的协同工作原理,这对于在性能要求高的场景下优化Java应用或者利用已有的C/C++库是非常有帮助的。 总结来说,"Jnidemo-master.3.17...

    java调用c语言

    以下是一个完整的示例,展示了如何实现Java调用C的过程: 1. **编写带有native声明的方法的Java类** ```java public class JNI_Test { // 传入一个String类型的字符串并将字符串转化为char类型的字符串后在后台...

    android JNI C 调用Java

    Android JNI(Java Native Interface)是Android系统提供的一种机制,它允许Java代码调用C/C++原生代码,同时也允许C/C++代码调用Java的方法。JNI在开发高性能、低级硬件交互、使用现有C库或者优化性能的关键部分时...

    JNI,java调用c Demo

    在这个"JNI,java调用c Demo"中,我们将探讨如何设置和使用JNI来让Java程序调用C代码。 首先,我们需要理解JNI的工作原理。JNI提供了一种接口,使得Java虚拟机(JVM)能够调用本地(native)代码,也就是非Java的...

    jni C调用java示例

    本示例将讲解如何在Android Studio 2.3.3版本下,通过C语言调用Java方法。 首先,理解JNI的基本结构。在Java端,我们需要定义一个本地方法,即使用`native`关键字声明的方法。例如: ```java public class ...

    使用JNI进行混合编程:在Java中调用C/C++本地库

    本教程将深入讲解如何使用JNI在Java中调用C/C++的本地库。 首先,我们需要理解JNI的基本概念。JNI提供了一套接口,让Java虚拟机(JVM)能够调用本地方法,这些方法由C或C++编写,并编译成动态链接库(如Windows下的...

Global site tag (gtag.js) - Google Analytics