zoukankan      html  css  js  c++  java
  • Java调用C/C++程序

    JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。

    1,在eclipse中需要做的事:

    创建一个Java工程,如下图:
     
       

    编写一个类Testdll.java,内容如下:

    package com.lonsine.www.jni;
    
    public class Testdll {
    
    static {
    
      System.out.println( System.getProperty("java.library.path"));//当你不知道dll文件放哪里的时候,查看此路径
    
      System.loadLibrary("goodluck");//这是声明类库
    
    }
    
    //下面是需要调用的接口方法,具体实现放在C++程序中实现
    
    public native static int get();
    
    public native static void set(int  i);
    
    public static void main(String[] args){
    
      Testdll test=new Testdll();
    
      test.set(10);
    
      System.out.println(test.get());
    
    }
    
    }

    2,找到编译后生成的Testdll.class 文件的目录的上一目录,在本项目中是F:\eclipse\bendiban\jnidemo\bin这个目录,通过cmd进入到该目录,然后执行javah com.lonsine.www.jni.Testdll如下图所以

     

    表示成功,生成com_lonsine_www_jni_Testdll.h头文件,文件内容如下:

    /* DO NOT EDIT THIS FILE - it is machine generated */
    
    #include <jni.h>
    
    /* Header for class com_lonsine_www_jni_Testdll */
    
     
    
    #ifndef _Included_com_lonsine_www_jni_Testdll
    
    #define _Included_com_lonsine_www_jni_Testdll
    
    #ifdef __cplusplus
    
    extern "C" {
    
    #endif
    
    /*
    
     * Class:     com_lonsine_www_jni_Testdll
    
     * Method:    get
    
     * Signature: ()I
    
     */
    
    JNIEXPORT jint JNICALL Java_com_lonsine_www_jni_Testdll_get
    
      (JNIEnv *, jclass);
    
     
    
    /*
    
     * Class:     com_lonsine_www_jni_Testdll
    
     * Method:    set
    
     * Signature: (I)V
    
     */
    
    JNIEXPORT void JNICALL Java_com_lonsine_www_jni_Testdll_set
    
      (JNIEnv *, jclass, jint );
    
     
    
    #ifdef __cplusplus
    
    }
    
    #endif
    
    #endif

    3,  安装时没有把jdk相关的jni头文件加入到VC++6.0的include文件夹中,

    Include文件夹中的jni.h、win32下的jawt_md.h、jni_md.h加入到..\VC98\Include目录下,如果已经存在,则不必添加做这步。

    4,  使用VC++6.0创建一个名为goodluck.dll的文件

    1)      打开VC++6.0,选择File->New->Win32 Dynamic-Link Library  填写你的Location和Project name ,Project name在这里填goodluck,然后点击OK。

    2)      将com_lonsine_www_jni_Testdll.h拷贝到goodluck工程文件夹中。

    3)      添加源文件goodluck.cpp,内容如下:

    /* DO NOT EDIT THIS FILE - it is machine generated */
    
    #include <jni.h>
    
    /* Header for class com_lonsine_www_jni_Testdll */
    
     
    
    #ifndef _Included_com_lonsine_www_jni_Testdll
    
    #define _Included_com_lonsine_www_jni_Testdll
    
    #ifdef __cplusplus
    
    extern "C" {
    
    #endif
    
    /*
    
     * Class:     com_lonsine_www_jni_Testdll
    
     * Method:    get
    
     * Signature: ()I
    
     */
    
    JNIEXPORT jint JNICALL Java_com_lonsine_www_jni_Testdll_get
    
      (JNIEnv *, jclass);
    
     
    
    /*
    
     * Class:     com_lonsine_www_jni_Testdll
    
     * Method:    set
    
     * Signature: (I)V
    
     */
    
    JNIEXPORT void JNICALL Java_com_lonsine_www_jni_Testdll_set
    
      (JNIEnv *, jclass, jint );
    
     
    
    #ifdef __cplusplus
    
    }
    
    #endif
    
    #endif

    4)点击编译成动态库就完成了。

    5,把在Debug文件夹中生成的goodluck.dll 文件拷贝到eclispse根目录下,即是System.getProperty("java.library.path");中显示的路径下。运行如下:

     

    这是我自己做的整个过程!

  • 相关阅读:
    Sublime Text 无法使用Package Control或插件安装失败的解决方法
    phpstorm破解
    require
    在线支付
    解决华为手机用rem单位,内容超出屏幕宽度问题
    JS如何判断是不是iphoneX
    iPhoneX页面安全区域与内容重叠问题
    .NET 大数据量并发解决方案
    js 弹出div窗口 可移动 可关闭
    colgroup 整行变色
  • 原文地址:https://www.cnblogs.com/lonsine/p/3117736.html
Copyright © 2011-2022 走看看