`
dyllove98
  • 浏览: 1403528 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:38978
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:79957
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:133071
社区版块
存档分类
最新评论

Windows平台上的JNI学习

 
阅读更多

一、首先是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学习笔记.doc

    ### JNI学习笔记详解 #### 一、JNI简介 JNI(Java Native Interface)是Java平台提供的一种强大机制,它允许Java程序直接调用本地代码(通常是C或C++编写)。这为Java应用程序带来了额外的灵活性,使得开发者能够...

    JNI学习笔记

    在JNI学习笔记中,我们首先了解到,尽管Java是一种跨平台的编程语言,但有时候仍然需要调用本地代码,通常这些本地代码是由C或C++编写的。这是因为本地代码运行在系统级别,可能执行一些Java虚拟机(JVM)无法直接...

    jni断点调试工程

    JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。在本项目"JNI断点调试工程"中,我们聚焦于使用Visual Studio 2008(VS2008)生成一个DLL动态链接库,这个库能够...

    jni学习详解

    虽然Java平台本身可能会在特定的操作系统上开发(例如Sun的Java Runtime Environment支持类Unix和Windows平台),但通过Java虚拟机,Java程序可以在多种不同的操作系统上运行,极大地提高了程序的可移植性和灵活性。...

    jni.h头文件

    例如,在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-windows-x86_64-1.6.0 libtensorflow_jni-cpu-...

    JNI学习资料

    这意味着,为了让JNI程序在不同平台上运行,我们需要为每个目标平台编译相应的动态库,例如Windows下的.dll,Linux/Unix下的.so,以及Mac OS X下的.jnilib。 下面是一个简单的JNI开发流程: 1. 创建Java类并声明...

    java 通过jni查看windows的CPU利用率的问题

    JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。在这个场景中,Java程序会调用本地(native)方法来获取CPU利用率,这些本地方法通常是用C++或C编写,并通过JNI接口与Java代码集成。 首先...

    第一个JNI实例学习

    JNI(Java Native Interface)是Java平台的一个重要特性,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都发挥着关键作用,比如优化性能、调用操作系统API、接入硬件设备、使用C/C++库等。在这个"第一...

    JNI编程学习文档

    ### JNI编程学习文档 #### 一、概述 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码与其他语言写的代码进行交互。JNI在Java与C/C++之间提供了桥梁,使得开发人员能够利用现有C/C++代码或者...

    JNI 实例, 可以作为模板供初学者学习, 例子很详细

    VC++ 6.0是一款经典的Windows平台上的C++开发工具,尽管现在已经有些过时,但对于初学者来说,它提供的环境简单易用,能够快速理解本地代码的编译和链接过程。在C++代码中,你需要按照JNI规范定义函数,使用`...

    Java jni调用c实例

    Java JNI(Java Native Interface)是Java平台...这个实例展示了Java和C/C++之间的交互,是学习和理解JNI机制的一个基础示例。通过掌握JNI,开发者可以充分利用两种语言的优点,如Java的跨平台性和C/C++的高效性能。

    基于JNI的Java串口通信系统的设计与实现——以Windows平台为例.zip

    在这个项目中,“基于JNI的Java串口通信系统的设计与实现——以Windows平台为例”将详细探讨如何利用JNI在Windows环境下实现Java程序与硬件设备的串口通信。 首先,我们需要理解JNI的基本概念。JNI提供了一种标准的...

    JNI_md.rar_jni

    JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他...通过`JNI_md.rar_jni`这个资源,你可以深入学习如何在不同平台上使用JNI来编译和使用本地方法库,进一步提升Java程序的扩展性和性能。

    JNI 学习-Java 调用C

    这篇博客文章“JNI学习 - Java调用C”可能是对如何通过Java来调用C代码进行详细解释的教程。 JNI的核心在于提供了一种机制,使得Java代码可以声明 native 方法,这些方法的实际实现是在C或C++中完成的。在Java中,...

    JNI学习指南(java 调用C/C++接口)

    ### JNI学习指南:Java调用C/C++接口详解 #### 一、引言 随着软件开发领域的不断发展,跨语言编程成为一种重要的技能。Java作为一种广泛使用的编程语言,因其跨平台特性和丰富的生态系统受到欢迎。然而,Java作为一...

    java jni简单实例

    4. **动态链接库**:本地方法实现完成后,需要编译成动态链接库(Windows上的.dll,Linux或MacOS上的.so文件)。这个库在Java程序运行时会被加载。 5. **Java端的调用**:在Java代码中,通过`System.loadLibrary()`...

    jni4net-0.8.8.0.zip

    jni4net是一个强大的工具,它实现了Java和.NET之间的互操作性,允许Java应用程序调用C#编写的DLL库。在标题“jni4net-0.8.8.0.zip”中,...通过不断学习和实践,开发者可以充分利用jni4net带来的便利,提高开发效率。

    JNI 学习资料

    本地方法库通常是一个动态链接库(如Windows上的.dll或Linux上的.so文件)。 3. **JNI头文件**:编写JNI代码时,需要包含jni.h头文件,这个头文件定义了JNI的API。 二、JNI的使用流程 1. **创建本地方法声明**:在...

Global site tag (gtag.js) - Google Analytics