注:博主所用环境:eclipse , java10,visual studio 2017

一、编写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 2017中新建一个项目,如下图。

将刚才生成的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++.”。

大功告成!

使用Java 10调用C/C++动态链接库dll之HelloWorld相关推荐

  1. java Jacob调用VB编写的DLL(COM组件)

    项目上有调用Visual Basic 6.0编写的DLL文件的需求,在使用JNA调用无果后,在网上找了部分资料,整理如下. 为什么用JNA无法调用? VB生成的COM组件,虽然是dll后缀,但事实上, ...

  2. java JNI调用C语言动态链接库(java.lang.UnsatisfiedLinkError: no yourClassName in java.library.path 异常的解决方法)

    转自: http://watershitter.iteye.com/blog/477615 今天花了至少3个小时跑这个java调c的动态链接库的Hello,native world的程序.  把所有犯 ...

  3. java开发调用C语言的DLL

    通过Java调用OCX控件或者DLL有以下几种方法,使用JNI.JACOB.Jawin等技术完成接口调用: 1.JNI 最直接的方式,也是最麻烦的方式,需要自己完成所有的工作,不推荐. 2.Jawin ...

  4. (JNI/JNA)java 调用c/c++ 动态链接库 全套操作+踩坑集锦

    第一篇文章终于写完-跨行三年,一直都是看别人的文章-今天咱终于自己写了一篇,自己总结的,希望能给你一点点帮助,如有错误,希望指出,立马改正. 0 前言 Java代码是跨平台的,其与硬件环境彻底&quo ...

  5. java jni调用dll文件_Java通过jni调用动态链接库

    (1)JNI简介 JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).从Java1.1开始,JNI标准成为java ...

  6. Java通过JNI调用C++动态链接库dll,并打在jar包内 ——JNA-JNI(一)

    Java通过JNI调用C++动态链接库dll,并打在jar包内--JNA-JNI(一) 系列文章: Java通过JNI调用C++动态链接库dll,并打在jar包内 --JNA-JNI(一) Java使 ...

  7. Unity调用动态链接库dll和so

    [001]Unity调用动态链接库dll和so  ApolloAR https://www.jianshu.com/p/f37bb72979a1 一.PC平台 (注:环境 VS2017+Unity20 ...

  8. Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27

    Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27 1. Jna简单介绍1 2. Jna范例halo owrld1 3. Jna概念2 3.1. (1)需 ...

  9. java com dll_通过COM组件方式实现java调用C#写的DLL文件

    通过Java调用C#的DLL文件实现.网上资料很多,自己整合总结了一下,做个备忘. 一.C#写com组件 开发环境 VS2013 1.新建工程:TestDemo(类库项目)     //根据自己需要取 ...

  10. java调用c so动态库_jni 调用C动态库dll/so

    http://hi.baidu.com/fengying765/blog/item/7081113e5fde53e555e7233f.html 作为主调方的Java源程序TestJNI.java如下. ...

最新文章

  1. Tomcat(二):tomcat配置文件server.xml详解和部署简介
  2. element ui走马灯怎么添加_Lovestu - Element UI 走马灯高度自适应
  3. 面试官:你说一下Redis使用场景都有哪些
  4. 科大星云诗社动态20210202
  5. 计算机视觉与深度学习 | SLAM之傻瓜书《 SLAM for Dummies》
  6. 也说说TIME_WAIT状态
  7. Diango博客--25.使用Coverage统计测试覆盖率
  8. python自动化测试脚本可以测php吗_python unittest实现api自动化测试_python
  9. Android中VectorDrawable与SVG
  10. linq判断集合中相同元素个数_java----Collection集合常用方法
  11. Android——Android Studio导入SlidingMenu类库的方法
  12. ThinkPHP单字母函数(快捷方法)使用总结
  13. rk399_android7.1的mipi驱动代码追踪(部分)
  14. Unity 脚本的生命周期
  15. C#常量——const和readonly(2)
  16. 【机械仿真】基于matlab水下机器人机械手系统仿真【含Matlab源码 1264期】
  17. 在GlassFish中应用Hibernate
  18. 计算机格式按键在哪儿,键盘开关按键在哪里
  19. php网站后台密码忘记,phpweb忘记后台密码
  20. 年末固定资产盘点季,企业如何快速盘点固定资产?

热门文章

  1. 计算机图形学完整笔记(八):曲线曲面 - 2
  2. 【 Codeforces Round #547 (Div. 3) F2】Same Sum Blocks (Hard)【思维贪心】
  3. MATLAB 数据显示格式
  4. 快速突破面试算法之栈与队列结构篇
  5. android 点击屏幕事件_Android 事件分发机制
  6. android sudio连接服务器教程,Android Studio连接手机设备教程
  7. C#基础List与ArrayList
  8. JavaWeb项目生成PDF文件添加水印图片并导出
  9. asp.net状态服务文章阅读
  10. Linux下不同颜色文件的类型