首页 > 系统相关 >Windows 下 JNA 调用动态链接库 dll

Windows 下 JNA 调用动态链接库 dll

时间:2023-03-15 22:05:57浏览次数:38  
标签:__ CLibrary name Windows dll int JNA 动态链接库 com

1. 创建动态链接库项目

  • 创建jnaTest项目

Windows 下 JNA 调用动态链接库 dll_java

下一步中填写项目名称和存储的目录;然后直接创建即可

Windows 下 JNA 调用动态链接库 dll_jna_02

创建结果

Windows 下 JNA 调用动态链接库 dll_jna_03

2. 定义头文件

#pragma once

#ifndef JNA_TEST_H
#define JNA_TEST_H

#ifdef __cplusplus
extern "C"
{
#endif
__declspec(dllexport) int add(int a, int b);

__declspec(dllexport) void welcome(char* name);

#ifdef __cplusplus
}
#endif
#endif //JNA_TEST_H

备注: 一定要添加​​__declspec(dllexport)​​,否则没有导出dll方法;在java调用这个方法时提示:

Exception in thread "main" java.lang.Unsatisfied
LinkError: Error looking up function

可参考文章

https://zhuanlan.zhihu.com/p/50997285

3. 添加cpp文件

#include "pch.h"
#include "JnaTest.h"
#include <string>

int add(int a, int b) {
return a + b;
}

void welcome(char* name) {
std::string temp = name;
printf_s(name);
}

4. 编写java文件

package com.jnademo;

import com.sun.jna.Library;
import com.sun.jna.Native;

public class JnaTest {

public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary) Native.load("E:\\dllws\\jnaTest\\x64\\Debug\\jnaTest.dll",
CLibrary.class);

int add(int a, int b);

void welcome(String name);
}

public static void main(String[] args) {
int sum = CLibrary.INSTANCE.add(10, 3);
CLibrary.INSTANCE.welcome("JNA hello world");
System.out.println(sum);
}
}

运行结果

Windows 下 JNA 调用动态链接库 dll_java_04

5. 如何检查缺少的dll依赖库

在进行生产部署时,有可能出现部署的服务器缺少依赖库的情况,这种情况下需要排查具体缺少哪个依赖库,再根据具体情况安装对应的运行环境。

查看dll或exe所依赖的dll,depends家喻户晓。可惜的是depends不支持win10,使用时直接停止响应。那么在win10上有没有类似工具呢?这里推荐一款开源工具Dependencies,非常的好用。 下载地址

https://github.com/lucasg/Dependencies

使用起来很简单,运行DependenciesGui.exe,然后直接将exe或dll文件拖到窗口中即可。

Windows 下 JNA 调用动态链接库 dll_jna_05

如果发现缺少应该的dll依赖库;根据具体情况如下地址下载对应版本的​​Visual C++ Redistributable​​,安装即可

https://www.microsoft.com/zh-cn/download/details.aspx?id=48145

比如像下图显示就是缺少了依赖库

Windows 下 JNA 调用动态链接库 dll_jna_06

标签:__,CLibrary,name,Windows,dll,int,JNA,动态链接库,com
From: https://blog.51cto.com/u_13538361/6123560

相关文章

  • JNA字符串类型操作
    1.返回字符串类型c/c++代码全局变量charretp[1024];constchar*getStr1(inta,intb){memset(retp,0,1024);charoutstr[256];memset(outstr,......
  • Windows 下 JNA 调用动态链接库 dll
    1.创建动态链接库项目创建jnaTest项目下一步中填写项目名称和存储的目录;然后直接创建即可创建结果2.定义头文件#pragmaonce#ifndefJNA_TEST_H#defineJNA......
  • Windows快捷键大全
    常用快捷键1、窗口操作中的快捷键F1帮助F5在当前打开的记事本中插入当前的系统时间F10激活菜单Alt+F4关闭当前窗口或退出程序Ctrl+Z撤消刚才操作Ctrl+C复制Ctrl+V粘......
  • windows barsip 32位编译
    环境win10vs2019安装Opensslv1.1.1t版本可以用MSVC编译openssl3版本需要使用mingw进行编译将baresiprerem下载到同一目录recmake-Bbuild-Awin32cmake......
  • Linux 实现 Windows 的 Event 事件机制
    前言Linux中没有Windows系统中的 CreateEvent()、WaitEvent()、SetEvent()、ResetEvent() 等函数,本文将介绍如何使用 pevents 替代Linux缺失的函数。pevents......
  • windows常用快捷键
    windows常用快捷键复制ctrl+c粘贴ctrl+v全选ctrl+a剪切ctrl+r撤销ctrl+z保存ctrl+s关闭窗口ctrl+F4永久删除shift+delete运行win+r我的电脑win+e任务......
  • mysql安装详细文档(windows)
    安装MySQLMySQL是目前最为流行的开放源码的数据库,是完全网络化的跨平台的关系型数据库系统,它是由瑞典MySQLAB公司开发,目前属于Oracle公司。任何人都能从Internet下载MySQL......
  • windows下安装elasticsearch
    下载地址:https://www.elastic.co/downloads/elasticsearch下载head地址:https://codechina.csdn.net/mirrors/mobz/elasticsearch-head?utm_source=csdn_github_accelerato......
  • 芯原和微软携手为边缘设备部署Windows 10操作系统
    芯原股份今日宣布与微软就Windows10IoT企业版操作系统开展合作,合作内容涵盖硬件加速器,以及对功能强大的嵌入式平台的长期支持。芯原将利用自身的嵌入式软件设计能力和数十......
  • 解决Windows下json.hpp中文乱码问题
    文中使用的是json库,整个库的代码由一个单独的头文件json.hpp组成,用普通的C++11编写的。它没有库,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来很方便。先引用头文......