zoukankan      html  css  js  c++  java
  • java 调用c++程序实例

    1.java程序:

    package com.zhangshitong;
    
    import java.io.File;
    
    public class Java2cpp {
    
        static{
             System.load("F:" + File.separator + "JavaCallcpp.dll");
        }
        
        public native int DLL_ADD(int a, int b); //add method
        
        public static void main(String[] args) {
            int sum =0;
            Java2cpp test = new Java2cpp();
            sum = test.DLL_ADD(45, 2);
            System.out.println("the result is: "+ sum);
        }
    }

    2. 找到java程序的.class文件,笔者用的是eclipse,所以找到项目的bin目录 cmd下使用  javah -classpath . -jni com.zhangshitong.Java2cpp

    或生成com_zhangshitong_Java2cpp.h文件

    3.以下步骤就是生成dll文件了,笔者用的visual studio 2008 

    需要注意的是需要安装64位的编译器,操作步骤详见:https://jingyan.baidu.com/article/a501d80c1aa5a4ec630f5eb6.html

    导入相关.h头文件:  1)com_zhangshitong_Java2cpp.h;  2)jni.h和jni_md.h问jdk中的头文件,在JDK_HOMEinclude 和DK_HOMEincludewin32中  拷贝到工程的头文件夹中,拷贝完之后,还需要引入

    4.  com_zhangshitong_Java2cpp.h文件 中的改为本地引用  com_zhangshitong_Java2cpp.h文件

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include "jni.h"
    /* Header for class com_zhangshitong_Java2cpp */
    
    #ifndef _Included_com_zhangshitong_Java2cpp
    #define _Included_com_zhangshitong_Java2cpp
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_zhangshitong_Java2cpp
     * Method:    DLL_ADD
     * Signature: (II)I
     */
    JNIEXPORT jint JNICALL Java_com_zhangshitong_Java2cpp_DLL_1ADD
      (JNIEnv *, jobject, jint, jint);
    
    #ifdef __cplusplus
    }
    #endif
    #endif

    相应的cpp文件:

    // JavaCallcpp.cpp : 定义 DLL 应用程序的导出函数。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include "com_zhangshitong_Java2cpp.h"
    using namespace std;
    JNIEXPORT jint JNICALL Java_com_zhangshitong_Java2cpp_DLL_1ADD(JNIEnv *, jobject, jint a ,jint b)
    {
        return a+b;
    }

    5.生成dll文件时 需用release模式,笔者再用debug模式的时候报错

    6.生成dll,然后把生成的dll拷贝到指定的目录,java程序在该位置调用即可

    相应的c++项目的目录结构是:

     红色框中的都是vs2008自动生成的

  • 相关阅读:
    leetcode Remove Linked List Elements
    leetcode Word Pattern
    leetcode Isomorphic Strings
    leetcode Valid Parentheses
    leetcode Remove Nth Node From End of List
    leetcode Contains Duplicate II
    leetcode Rectangle Area
    leetcode Length of Last Word
    leetcode Valid Sudoku
    leetcode Reverse Bits
  • 原文地址:https://www.cnblogs.com/zhangshitong/p/9030156.html
Copyright © 2011-2022 走看看