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