zoukankan      html  css  js  c++  java
  • JNI--java调用C&C++

     直接上步骤:

    编写java代码

    package cn.ace.jni;

     

    public class TestNative {

     

        public native void sayHello();

       

        public static void main(String[] args) {

          

        }

    }

    使用javah.exe工具生成头文件 cn_ace_jni_TestNative.h

    生成方法:

    执行如下命令:TestNative为class的文件名

     

    生成文件内容:

    /* DO NOT EDIT THIS FILE - it is machine generated */

    #include <jni.h>

    /* Header for class cn_ace_jni_TestNative */

    #ifndef _Included_cn_ace_jni_TestNative

    #define _Included_cn_ace_jni_TestNative

    #ifdef __cplusplus

    extern "C" {

    #endif

    /*

     * Class:     cn_ace_jni_TestNative

     * Method:    sayHello

     * Signature: ()V

     */

    JNIEXPORT void JNICALL Java_cn_ace_jni_TestNative_sayHello

      (JNIEnv *, jobject);

    #ifdef __cplusplus

    }

    #endif

    #endif

    编写C++代码,生成动态库 

    创建工程:MFC

     

    将cn_ace_jni_TestNative.h添加到工程中,同时将编译时所以来的jdk相关文件拷贝到VC工程目录下(jni_md.h、jni.h)此文件为D:j2ee_libjdk1.6.0_10include目录下 

    创建C++ 文件,source.cpp 内容:

    #include"cn_ace_jni_TestNative.h"

    #include<iostream>

    using namespace std;

    JNIEXPORT void JNICALL Java_cn_ace_jni_TestNative_sayHello(JNIEnv * env, jobject obj)

    {

             cout<<"Hello world!"<<endl;

    }

    编译工程生成testNative.dll

    将testNative.dll设置为系统环境变量(path):D:TestC++ estNativeDebug;

    编写java代码调用动态库:

    package cn.ace.jni;

     

    public class TestNative {

     

        public native void sayHello();

       

        public static void main(String[] args) {

           System.loadLibrary("testNative");

           TestNative testNative = new TestNative();

           testNative.sayHello();

        }

    }

    完成后运行: 出现错误如下:

    原因:刚设置的环境变量没有生效,导致找不到动态库的路径

    解决办法:重启动eclipse,因为eclipse在初次启动时,会加载环境变量。

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no testNative in java.library.path

        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)

        at java.lang.Runtime.loadLibrary0(Runtime.java:823)

        at java.lang.System.loadLibrary(System.java:1030)

        at cn.ace.jni.TestNative.main(TestNative.java:8)

  • 相关阅读:
    如何在ASP.NET 5和XUnit.NET中进行LocalDB集成测试
    如何在单元测试过程中模拟日期和时间
    Azure Blob Storage从入门到精通
    免费电子书:使用VS Online敏捷管理开源项目
    使用ASP.NET 5开发AngularJS应用
    Syncfusion的社区许可及免费电子书和白皮书
    理解ASP.NET 5的中间件
    惊鸿一瞥(Glimpse)——开发之时即可掌控ASP.NET应用的性能
    用于Simple.Data的ASP.NET Identity Provider
    大数据技术之_19_Spark学习_01_Spark 基础解析小结(无图片)
  • 原文地址:https://www.cnblogs.com/hutton/p/4547587.html
Copyright © 2011-2022 走看看