• java调用C++代码


    一、在要使用到C++代码的类文件中声明一个native方法,例如:

    1 public class TestNative{
    2 
    3     public native void test();
    4 
    5 
    6 }

    二、javac编译此java文件,然后使用javah TestNative命令生成一个头文件

    三、使用visual studio工具新建dll项目

    然后将jdk目录下的inlcude文件夹下的jni.h和jawt.h以及include/win32文件夹下的jin_md.h和jawt_md.h文件添加在上面的dll项目中,然后将我们之前生成的TestNative.h文件中的#include<jni.h>改为#inlcude"jni.h"因为引号是在本地查找头文件,

    而<>实在标准库函数中查找。

     1 /* DO NOT EDIT THIS FILE - it is machine generated */
     2 #include "jni.h"
     3 /* Header for class TestNative */
     4 
     5 #ifndef _Included_TestNative
     6 #define _Included_TestNative
     7 #ifdef __cplusplus
     8 extern "C" {
     9 #endif
    10 /*
    11  * Class:     TestNative
    12  * Method:    test
    13  * Signature: (LTestNative/JavaObject;)V
    14  */
    15 JNIEXPORT void JNICALL Java_TestNative_test
    16   (JNIEnv *, jobject);
    17 
    18 #ifdef __cplusplus
    19 }
    20 #endif
    21 #endif

    然后我们在C++中实现这个函数即可,例如:

     1 // Dll_native.cpp: 定义 DLL 应用程序的导出函数。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include "TestNative.h"
     6 #include <iostream>
     7 
     8 
     9 JNIEXPORT void JNICALL Java_TestNative_test(JNIEnv *, jobject) {
    10     
    11     std::cout << "hello C++" << std::endl;
    12 }

    最后编译项目生成一个dll文件;

    四、最后将生成好的dll文件放到java项目中,使用代码调用:

     1 public class TestNative{
     2 
     3     public native void test();
     4 
     5     public static void main(String[] args){
     6 
     7         System.loadLibrary("Dll_native");
     8 
     9         TestNative tn = new TestNative();
    10         tn.test();
    11     }
    12 
    13 
    14 }
  • 相关阅读:
    hadoop——数据清洗测试
    本地配置hadoop
    从textarea中获取数据后按原样显示
    form自动提交
    艺术和代码的结合 turtle + python 的结合
    python-->微信支付
    python-图片流传输(url转换二维码)
    python-qrcode-二维码
    Java 通过先序中序序列生成二叉树
    Java 实现二叉树的构建以及3种遍历方法
  • 原文地址:https://www.cnblogs.com/CLAYJJ/p/7725975.html
Copyright © 2020-2023  润新知