zoukankan      html  css  js  c++  java
  • eclipse调用JNI之环境的搭建

    因为项目中要在Java中调用C++编好的代码,即用eclipse调用动态链接库,故花了点时间研究在eclipse中使用JNI。


    有时候因为Java本身特性的限制,单独使用Java语言可能不能完全满足应用程序的需要,这时需要使用JNI(JavaNative Interface)来编写Java本地方法,用来处理那些不能完全用Java语言编写应用程序的情况。通过JNI技术,Java开发者可以调用C/C++等其他语言编写的代码。JNI是Java语言和其他语言间的一座桥梁,通过访问JNI定义的接口来获得服务,在JNI的另一面可以通过C/C++或其它语言实现这些接口。


    本文实现的目的是:在Java中定义一个方法,在C++中实现这个方法,在方法内部输出“Hello World",然后再回到Java中进行调用。


    本文使用的环境是:win10  +  eclipse(eclipse-jee-neon-2-win32)+  VC++6.0(绿色英文版)。


    第一步:在Eclipse中建立一个类:JNIDemo

    package com.jni.demo;
    
    public class JNIDemo {
    
    	//定义一个本地方法
    	public native void sayHello();
    	
    	public static void main(String[] args) {
    		//调用动态链接库
    		System.loadLibrary("JNIDemo");
    		JNIDemo jniDemo = new JNIDemo();
    		jniDemo.sayHello();
    
    	}
    
    }
    其中sayHello就是要在C++中实现的方法。


    第二步:使用javah命令将JNIDemo生成.h的头文件:

    命令如下:

    G:CodeeclipseJNIDemoin>javah com.jni.demo.JNIDemo


    命令执行成功后会在bin目录中生成头文件:com_jni_demo_JNIDemo.h


    第三步:使用VC++6.0生成.dll文件

    1、在VC++6.0中新建一个项目JNIDemo,项目类型为Win32 Dynamic-Link Library,点击OK。



    2、在弹出的窗口中选择A simple DLL project,点击Finish。



    3、打开项目所在的文件目录,将步骤2中生成的com_jni_demo_JNIDemo.h文件复制到此目录。然后点击工程窗口左边的FileView,切换到文件浏览模式。在Header Files上点击右键,选择Add Files to Folder,选择TestHello.h文件,点击OK。



    4、打开StdAfx.h文件,再最后面添加:

    #include <jni.h>
    #include "com_jni_demo_JNIDemo.h"

    5、打开JNIDemo.cpp文件,在最后面添加一段代码:

    JNIEXPORT void JNICALL Java_com_jni_demo_JNIDemo_sayHello (JNIEnv * env, jobject obj)  
    {  
    	printf("Hello World!
    "); 
    }

    6、在VC的菜单上选择Tools-Options,打开选项对话框,在Directories文件夹,添加上jdk所在文件夹下的include和includewin32文件夹。


    其实就是要把jni.h和jni_md.h文件添加的工程上来。

    7、点击VC6.0上的菜单项Build-Build All,生成JNIDemo.dll。编译成功后,生成JNIDemo.dll文件在C++工程中的Debug目录中。


    第四步:调用.dll文件。

    有两种方式:

    第一种方式:将VC++项目Debug文件夹中的JNIDemo.dll复制到JNIDemo.class所在的文件夹中。然后在命令行下输入java com.jni.demo.JNIDemo, 输出Hello World!



    第二种方式:将JNIDemo.dll文件添加到path环境变量中


    然后在eclipse中运行:


  • 相关阅读:
    字符串类型
    数据类型之整型
    数据类型
    两个版本的区别
    变量
    DHCP
    MySQL数据库编译及入门
    NFS网络文件系统
    Rsync 数据同步
    互联网数据分享平台
  • 原文地址:https://www.cnblogs.com/yzy-blogs/p/6597327.html
Copyright © 2011-2022 走看看