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

Windows 下 JNA 调用动态链接库 dll

时间:2023-03-15 21:02:01浏览次数:42  
标签:__ CLibrary Windows dll int JNA 动态链接库 com

1. 创建动态链接库项目

  • 创建jnaTest项目

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

创建结果

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);
	}
}

运行结果

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

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

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

https://github.com/lucasg/Dependencies

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

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

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

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

标签:__,CLibrary,Windows,dll,int,JNA,动态链接库,com
From: https://www.cnblogs.com/happyhuangjinjin/p/17219986.html

相关文章

  • 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编写的。它没有库,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来很方便。先引用头文......
  • pip下载安装库、模块慢,配置windows全局的国内源
    步骤windows+r打开命令行;输入%appdata%回车;在出现的文件夹中找到名称为pip的文件夹(没有则创建)创建pip.ini文件[global]timeout=6000index-url=http://pypi.......
  • vue3仿windows弹窗
     一款基于vue3的仿windows弹窗。可以组件模板编写或函数式创建。地址:https://github.com/dnoyeb/box-win   安装npmadd'box-win'两种方式:1、组......