南开小巷

导航

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_HOME\include 和DK_HOME\include\win32中  拷贝到工程的头文件夹中,拷贝完之后,还需要引入

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自动生成的

posted on 2018-05-12 22:14  南开小巷  阅读(995)  评论(0编辑  收藏  举报