`
wen866595
  • 浏览: 267128 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Windows 下 JNI 备忘

阅读更多
1、编写需要使用Jni的Java类文件
public class JniCall {
	static {
		System.loadLibrary("testJNA");
	}
	
	public native static int add(int first, int second);
	
	public static void main(String[] args) {
		int first = 3;
		int second = 4;
		
		System.out.printf("print in java : %d + %d = %d", first, second, add(first, second));
	}
}

本地方法必须声明为native。

2、编译出class文件,用javah从class文件生成C的头文件JniCall.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class JniCall */

#ifndef _Included_JniCall
#define _Included_JniCall
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     JniCall
 * Method:    add
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_JniCall_add
  (JNIEnv *, jclass, jint, jint);


typedef struct Student {
	char * name;
	int age;
	int height;

}StudentObj;

#ifdef __cplusplus
}
#endif
#endif



3、在VC下建立一个动态链接库项目testJNA

倒数第二个。

4、把生成的JniCall.h和$JAVA_HOME/include/jni.h、$JAVA_HOME/include/win32jni_md.h拷贝到vc项目testJNA的目录下


5、编写C的本地实现

#include "stdafx.h"


BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    return TRUE;
}

JNIEXPORT jint JNICALL Java_JniCall_add(JNIEnv *, jclass, jint first, jint second) {
	printf("print in c    : %d + %d = %d \n", first, second, first + second);
	return first + second;
}


6、构建testJNA项目,生成testJNA.dll文件


7、把testJNA.dll拷贝到$JAVA_HOME/jre/bin目录下

8、运行Java类,调用本地方法
D:\Java\jdk1.6.0_02\bin>java JniCall
print in c    : 3 + 4 = 7
print in java : 3 + 4 = 7
D:\Java\jdk1.6.0_02\bin>

分享到:
评论

相关推荐

    Windows下JNI初学实例

    【Windows下JNI初学实例】 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都非常重要,例如调用系统底层库、提升性能、接入硬件设备等。这篇...

    windows编译Jni(无需Cygwin)

    在Windows环境下,开发Android应用程序时,我们经常需要与本地代码(如C或C++)进行交互,这就是JNI(Java Native Interface)的作用。本教程将详细介绍如何在Win7系统上,利用Eclipse集成开发环境和Android NDK...

    在windows中jni(生成dll)Linux中jni(生成so),java调用曾c++

    在本主题中,我们将深入探讨如何在Windows和Linux环境中利用JNI来生成动态链接库(DLL for Windows,SO for Linux),并使Java能够调用C++编写的函数。 1. **Java调用C++的基本原理** - JNI为Java应用程序提供了一...

    JNI的两个头文件jni.h和jni_md.h

    JNI在很多场景下都是必要的,比如调用操作系统本地库、加速性能关键的代码或者利用硬件特性等。本文将深入探讨JNI的两个核心头文件——`jni.h`和`jni_md.h`。 首先,`jni.h`是JNI的主要接口头文件,包含了所有JNI的...

    windows_JNI_32.rar

    标题中的"windows_JNI_32.rar"表明这是一个在Windows平台上使用的、与JNI(Java Native Interface)相关的软件或工具包,且是适用于32位系统的。JNI是Java平台的一个核心特性,它允许Java代码与其他语言写的代码进行...

    Java JNI调用动态库(Linux、Windows)的实现步骤

    具体来说,对于 Windows 平台,通常需要将 `.dll` 文件放在项目的类路径下或系统的搜索路径中;对于 Linux 平台,则需要将 `.so` 文件放在 `/usr/lib` 或其他合适的位置,并确保它们对所有用户都可读。 #### 五、...

    jni断点调试工程

    总的来说,"JNI断点调试工程"提供了在Windows环境下使用Visual Studio 2008进行JNI开发和调试的实践经验。它强调了正确配置调试环境和理解JNI工作原理的重要性,这对于那些需要在Java中集成本地代码功能的开发者来说...

    jni.zip jni编译jni下载

    JNI在很多场景下非常有用,比如当需要利用已有的C或C++库,或者提升性能时,我们可以通过JNI将Java代码与本地代码集成。 在描述中提到的`jni.h`和`jni_md.h`是JNI编程中必不可少的头文件。`jni.h`包含了JNI接口的...

    中科院分词ictclas50 windows 32 JNI

    中科院分词工具,jni调用,包括文档和demo。该demo为改造版,官方提供的的ICTCLAS2011在java中使用总是报错,这个demo可以正常使用

    ICTCLAS50_Windows_64_JNI

    中科院中文分词windows 64位系统JNI方式调用程序。

    android studio 下jni学习

    本教程聚焦于在Android Studio环境下使用JNI进行学习,涵盖了基本数据类型转化、引用数据类型转化以及JSON格式数据类型的转化。 首先,我们要理解JNI的基本概念。JNI为Java程序提供了一个接口,通过这个接口,Java...

    ICTCLAS50_Windows_32_JNI 的使用

    ICTCLAS50_Windows_32_JNI 的使用,介绍ICTCLAS50_Windows_32_JNI 在eclipse等环境下的配置,以及怎么测试ICTCLAS50_Windows_32_JNI

    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-...

    android jni(demo) 基于windows平台

    通过这个简单的JNI示例,我们可以看到在Windows环境下,如何利用Android SDK和NDK进行本地代码的开发。理解并熟练运用JNI,不仅可以提升Android应用的性能,还能帮助开发者充分利用现有C/C++库,为复杂功能的实现...

    windows下 eclipse+ndk编译及使用jni示例

    1.) 在项目根目录下创建jni目录,下面是要放进去的第一个文件Android.mk LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := main_jni #LOCAL_CFLAGS := LOCAL_SRC_FILES := main.cpp #LOCAL_...

    android下JNI使用方法

    Android下的JNI(Java Native Interface)是一种允许Java代码与其他语言(如C、C++)交互的技术。JNI是Java 2 SDK的一部分,它提供了在Java程序中调用本地(非Java)代码的能力。当Java标准库无法满足特定需求,如...

    DELPHI开发JNI必备 jni.pas

    JNI,全称Java Native Interface,是Java平台标准的一部分,它为Java代码和其他语言写的代码提供了一个接口。在Java应用程序中,JNI允许Java代码调用本地(非Java)代码,反之亦然,使得开发者能够利用Java的跨平台...

    Android下jni开发Demo

    本教程将深入探讨Android下的JNI开发,并通过一个实际的Demo来阐述相关知识点。 1. **JNI基础** - **JNI简介**:JNI是Java平台的一部分,它为Java开发者提供了一种方式,可以直接在Java代码中调用本地(非Java)...

    mac 下jni编译代码

    在Mac环境下,JNI的编译过程可能会与Windows或Linux有所不同,因为每个操作系统有自己的库管理和编译工具链。本篇文章将深入探讨如何在Mac上进行JNI编译。 首先,确保你已经安装了Java Development Kit (JDK)。Java...

Global site tag (gtag.js) - Google Analytics