Win下JNA调用C/C++导出的DLL
来源:互联网 发布:js中window事件 编辑:程序博客网 时间:2024/06/05 10:40
Win下使用JNA在Java中调用C/C++导出的DLL
所用环境
- Win10
- Eclipse
- VS2017
- JNA(jna-4.4.0.jar)
jna-4.4.0.jargithub:https://github.com/java-native-access/jna百度云 :链接:https://pan.baidu.com/s/1dEA11RV 密码: yyrk
具体操作
生成DLL
使用VS2017新建项目
应用程序类型中勾选DLL,附加选项中勾选导出符号
修改导出符号
以我的项目为例,项目名为TestDynamic
下面是VS2017自动生成代码
#ifdef TESTDYNAMIC_EXPORTS#define TESTDYNAMIC_API __declspec(dllexport)#else#define TESTDYNAMIC_API __declspec(dllimport)#endif
由于JNA只能调用C导出的,故需修改为以下代码
#ifdef TESTDYNAMIC_EXPORTS#define TESTDYNAMIC_API extern "C" __declspec(dllexport)#else#define TESTDYNAMIC_API extern "C" __declspec(dllimport)#endif
编写所需导出代码
在TestDynamic.h中添加如下代码
#include<iostream>TESTDYNAMIC_API void myprint();TESTDYNAMIC_API int square(int n);
在TestDynamic.cpp中添加如下代码
TESTDYNAMIC_API void myprint(){ std::cout << "Hello DLL\n";}TESTDYNAMIC_API int square(int n) { return n*n;}
若为64位,则选择x64,然后生成TestDynamic.dll(dll名字一般与项目名一致)
新建Java工程
打开Eclipse新建工程TestDLL
将生成的TestDynamic.dll和jna-4.4.0.jar放在TestDLL工程目录下,并将jna-4.4.0.jar Add to Build Path
编写代码
import com.sun.jna.Library;import com.sun.jna.Native;public class TestDLL { interface DllHelper extends Library{ //dll名为TestDynamic.dll,填参数无需后缀 DllHelper instance=(DllHelper)Native.loadLibrary("TestDynamic",DllHelper.class); //dll导出的函数 public int square(int n); public void myprint(); } public static void main(String[] args) { long ret=DllHelper.instance.square(20); System.out.println(ret); DllHelper.instance.myprint(); }}
编译运行
结果如下
400Hello DLL
总结
JNA相对的局限性较大,只能调用C的导出,即若不加extern “C” 否则在Java调用DLL时将无法查找到函数
阅读全文
0 0
- Win下JNA调用C/C++导出的DLL
- JNA调用C实现的DLL
- jna调用c 的dll(包含回调函数)
- JNA调用C动态库dll、so
- java通过JNA调用c语言dll
- jna dll c
- 64位win7 使用jna调用C dll报错
- windows/linux + java + jna + dll/so 调用C/C++
- Java使用JNA调用C的SDK
- Atitit.java jna 调用c++ dll 的总结
- JNA调用C++的DLL
- Simplest JNA 【java调用C++】
- vb下调用C++dll的方法
- .net下调用c/c++的dll
- JNA使用---Java 和 C 语言之间的调用
- win下C/C++调用python
- java(JNA)调用dll函数的问题
- Java调用dll的实现,JNA框架
- 【数论】【容斥原理】八
- 一点python基础知识
- Druid中(*)druid property for user to setup问题的解决办法
- C++递归算法之分成互质组
- 触摸事件
- Win下JNA调用C/C++导出的DLL
- 多线程的各种案例
- kakfa in docker
- c语言核心整理之数据类型,运算符,表达式和语句
- 移植QT到QNX,QNX开发QT程序,QT图形开发环境搭建
- 道路和航路
- 阿拉伯文变形规范,阿拉伯语变形规则,阿拉伯文组合规则
- react-native组件的拆分技巧
- codevs 2021 中庸之道