注:博主所用环境:eclipse , java10,visual studio
一、编写Java程序
首先打开eclipse,新建java工程
在建好的工程中新建一个源文件:右键点击src——》new——》class
在对话框中输入包名、类名,并勾选自动生成main函数。
编写java程序,最终如下:
package helloworld;public class HelloWorld {public native void sayHello();public static void main(String[] args) {// TODO Auto-generated method stubSystem.loadLibrary("HelloWorld"); HelloWorld helloworld = new HelloWorld();helloworld.sayHello();}}
其中关键字native表示该函数将用本地方法(即我们用的C/C++所写的函数方法)、loadLibrary中的参数“HelloWorld”是我们待会生成的动态链接库文件HelloWorld.dll。
在Windows下打开cmd命令行,进入该程序所在目录,输入以下命令生成对应.class和.h文件。
javac -h . HelloWorld.java
二、编写C++程序
在visual studio 中新建一个项目,如下图。
将刚才生成的helloworld_HelloWorld.h,D:\Java\include\jni.h,D:\Java\include\win32\jni_md.h拷贝到D:\Projects\VS\HelloWorld\HelloWorld\HelloWorld(以上路径均需要根据自己的路径修改,前两个路径是JAVA_HOME下的)。
在Visual Studio中添加上述三个头文件。如图所示。
对helloworld_HelloWorld.h第二行进行修改,将
#include <jni.h>
修改为
#include "jni.h"
在stdafx.h中添加以下代码,将头文件包含进来。
#include "helloworld_HelloWorld.h"
在HelloWorld.cpp中添加对应的函数定义。HelloWorld.cpp代码如下:
// HelloWorld.cpp: 定义 DLL 应用程序的导出函数。//#include "stdafx.h"JNIEXPORT void JNICALL Java_helloworld_HelloWorld_sayHello(JNIEnv *, jobject){printf("Hello world from C++.");}
在Visual Studio选择x64(不是x86)来生成64位的动态链接库文件。
最后点击工具栏中的生成——》生成解决方案。输出显示生成成功,如下图。
三、运行java程序
将D:\Projects\VS\HelloWorld\HelloWorld\x64\Debug\HelloWorld.dll拷贝到%JAVA_HOME%\bin文件夹中(楼主这里是D:\Java\bin)。
打开eclipse,直接运行第一步的工程。可以看到下方窗口输出“Hello world from C++.”。
大功告成!