• 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 }
  • 相关阅读:
    SQl语句学习笔记(二)
    Adaboost 算法
    降维PCA技术
    scanf 格式化字符串详解
    大小端模式和位域详解(转载)
    推荐系统开源软件列表汇总和点评(转载)
    遗传算法入门(转载)
    大白话解析模拟退火算法(转载)
    机器学习相关——协同过滤(转载)
    python面向对象之单例模式
  • 原文地址:https://www.cnblogs.com/CLAYJJ/p/7725975.html
Copyright © 2020-2023  润新知