一、首先是java源文件 MyJni.java
package org.mizhongqin.jni; public class MyJni { //native method public native void display(); public native double sum(double x,double y); static { System.loadLibrary("Myjnid"); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new MyJni().display(); System.out.println(new MyJni().sum(1.0, 2.0)); } }
二、生成 MyJni.class 文件, org_mizhongqin_jni_MyJni.h头文件
在D:\workspace\JAVA\src\org\mizhongqin\jni\ 下可以看到 MyJni.class 文件
在D:\workspace\JAVA\src\可以看到org_mizhongqin_jni_MyJni.h 文件,内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class org_mizhongqin_jni_MyJni */ #ifndef _Included_org_mizhongqin_jni_MyJni #define _Included_org_mizhongqin_jni_MyJni #ifdef __cplusplus extern "C" { #endif /* * Class: org_mizhongqin_jni_MyJni * Method: display * Signature: ()V */ JNIEXPORT void JNICALL Java_org_mizhongqin_jni_MyJni_display (JNIEnv *, jobject); /* * Class: org_mizhongqin_jni_MyJni * Method: sum * Signature: (DD)D */ JNIEXPORT jdouble JNICALL Java_org_mizhongqin_jni_MyJni_sum (JNIEnv *, jobject, jdouble, jdouble); #ifdef __cplusplus } #endif #endif
三、然后是 C/C++源文件 MyJni_c.cpp
//必须的头文件jni.h #include <jni.h> //导入我们需要实现的本地方法 #include "org_mizhongqin_jni_MyJni.h" #include <stdio.h> JNIEXPORT void JNICALL Java_org_mizhongqin_jni_MyJni_display (JNIEnv *env, jobject obj) { printf("Hello World tom!!"); return; } JNIEXPORT jdouble JNICALL Java_org_mizhongqin_jni_MyJni_sum (JNIEnv *env, jobject obj, jdouble a, jdouble b) { return a + b; }
四、生成DLL文件
D:\Program Files\Java\jdk1.6.0_21\include\jni.h
D:\Program Files\Java\jdk1.6.0_21\include\win32\jawt_md.h
D:\Program Files\Java\jdk1.6.0_21\include\win32\jni_md.h
注意:
上面是JDK安装路径下include目录下的jni.h和 win32目录下的jawt_md.h jni_md.h 三个文件
把jni.h jawt_md.h jni_md.h 拷贝到D:\Program Files\Microsoft Visual Studio 10.0\VC\include 即Visual Studio 安装目录下的 \VC\include目录中
同时把第二步生成的org_mizhongqin_jni_MyJni.h拷贝到 org_mizhongqin_jni_MyJni.h 便于执行cl 命令,即:
结果正式生成Myjnid.dll文件
五、配置Java工程的DLL库路径 ,运行MyJni.java
运行结果:
相关推荐
### JNI学习笔记详解 #### 一、JNI简介 JNI(Java Native Interface)是Java平台提供的一种强大机制,它允许Java程序直接调用本地代码(通常是C或C++编写)。这为Java应用程序带来了额外的灵活性,使得开发者能够...
在JNI学习笔记中,我们首先了解到,尽管Java是一种跨平台的编程语言,但有时候仍然需要调用本地代码,通常这些本地代码是由C或C++编写的。这是因为本地代码运行在系统级别,可能执行一些Java虚拟机(JVM)无法直接...
JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。在本项目"JNI断点调试工程"中,我们聚焦于使用Visual Studio 2008(VS2008)生成一个DLL动态链接库,这个库能够...
虽然Java平台本身可能会在特定的操作系统上开发(例如Sun的Java Runtime Environment支持类Unix和Windows平台),但通过Java虚拟机,Java程序可以在多种不同的操作系统上运行,极大地提高了程序的可移植性和灵活性。...
例如,在32位Windows平台上,它可能会定义`jint`为`int`,而在64位Linux上可能定义为`long`。这个文件让JNI代码能够在不同的平台上正确地编译和运行。 在实际使用中,开发者通常不会直接包含`jni_md.h`,而是通过`#...
libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-...
这意味着,为了让JNI程序在不同平台上运行,我们需要为每个目标平台编译相应的动态库,例如Windows下的.dll,Linux/Unix下的.so,以及Mac OS X下的.jnilib。 下面是一个简单的JNI开发流程: 1. 创建Java类并声明...
JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。在这个场景中,Java程序会调用本地(native)方法来获取CPU利用率,这些本地方法通常是用C++或C编写,并通过JNI接口与Java代码集成。 首先...
JNI(Java Native Interface)是Java平台的一个重要特性,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都发挥着关键作用,比如优化性能、调用操作系统API、接入硬件设备、使用C/C++库等。在这个"第一...
### JNI编程学习文档 #### 一、概述 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码与其他语言写的代码进行交互。JNI在Java与C/C++之间提供了桥梁,使得开发人员能够利用现有C/C++代码或者...
VC++ 6.0是一款经典的Windows平台上的C++开发工具,尽管现在已经有些过时,但对于初学者来说,它提供的环境简单易用,能够快速理解本地代码的编译和链接过程。在C++代码中,你需要按照JNI规范定义函数,使用`...
Java JNI(Java Native Interface)是Java平台...这个实例展示了Java和C/C++之间的交互,是学习和理解JNI机制的一个基础示例。通过掌握JNI,开发者可以充分利用两种语言的优点,如Java的跨平台性和C/C++的高效性能。
在这个项目中,“基于JNI的Java串口通信系统的设计与实现——以Windows平台为例”将详细探讨如何利用JNI在Windows环境下实现Java程序与硬件设备的串口通信。 首先,我们需要理解JNI的基本概念。JNI提供了一种标准的...
JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他...通过`JNI_md.rar_jni`这个资源,你可以深入学习如何在不同平台上使用JNI来编译和使用本地方法库,进一步提升Java程序的扩展性和性能。
这篇博客文章“JNI学习 - Java调用C”可能是对如何通过Java来调用C代码进行详细解释的教程。 JNI的核心在于提供了一种机制,使得Java代码可以声明 native 方法,这些方法的实际实现是在C或C++中完成的。在Java中,...
### JNI学习指南:Java调用C/C++接口详解 #### 一、引言 随着软件开发领域的不断发展,跨语言编程成为一种重要的技能。Java作为一种广泛使用的编程语言,因其跨平台特性和丰富的生态系统受到欢迎。然而,Java作为一...
4. **动态链接库**:本地方法实现完成后,需要编译成动态链接库(Windows上的.dll,Linux或MacOS上的.so文件)。这个库在Java程序运行时会被加载。 5. **Java端的调用**:在Java代码中,通过`System.loadLibrary()`...
jni4net是一个强大的工具,它实现了Java和.NET之间的互操作性,允许Java应用程序调用C#编写的DLL库。在标题“jni4net-0.8.8.0.zip”中,...通过不断学习和实践,开发者可以充分利用jni4net带来的便利,提高开发效率。
本地方法库通常是一个动态链接库(如Windows上的.dll或Linux上的.so文件)。 3. **JNI头文件**:编写JNI代码时,需要包含jni.h头文件,这个头文件定义了JNI的API。 二、JNI的使用流程 1. **创建本地方法声明**:在...