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

Windows 下 JNA 调用动态链接库 dll

时间:2023-06-02 11:38:19浏览次数:53  
标签:__ CLibrary name Windows dll int JNA 动态链接库 com


1. 创建动态链接库项目

  • 创建jnaTest项目

Windows 下 JNA 调用动态链接库 dll_windows

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



Windows 下 JNA 调用动态链接库 dll_开发语言_02

创建结果



Windows 下 JNA 调用动态链接库 dll_开发语言_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_依赖库_04

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

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

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

https://github.com/lucasg/Dependencies

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



Windows 下 JNA 调用动态链接库 dll_依赖库_05

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

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

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



Windows 下 JNA 调用动态链接库 dll_windows_06


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

相关文章

  • windows10环境下安装RabbitMQ以及延时插件(图文)
    安装转载:https://www.cnblogs.com/saryli/p/9729591.html插件转载:https://blog.csdn.net/nbdclw/article/details/107441772安装及配置环境第一步:下载并安装erlang原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装RabbitMQ的前提是安装Erlang。下载地址:http://ww......
  • Windows11 访问WINOWS 2003 远程桌面提示 由于这台计算机没有远程桌面客户端许可证,远
    今天遇到,,Windows11访问WINOWS2003远程桌面 提示如下,解决方法在提示由于由于这台计算机没有远程桌面客户端许可证,远程会话连接己断开的计算机上,  打开注册表regedit计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSLicensing\Store\ 选中LICENSE000,将其删除 ......
  • windows cmd使用ssh连接Linux以及文件上传
    CMD连接服务器命令(47.102.144.221为服务器IP)sshroot@47.102.144.221文件上传(scp后面参数为本地文件地址,47.102.144.221为服务器IP,冒号后面指将文件上传到服务器哪个目录下)scpD:\index.txtroot@47.102.144.221:/server/tmp如何要从服务器下载文件还是使用scp命令如下:sc......
  • windows10 系统默认备份后如何还原?
     在控制面板中如下操作: 选着开始系统还原: 选着备份的还原文件   ......
  • Windows和Ubuntu使用网线直连搭建局域网
    Windows配置右键网络--->属性--->更改适配器设置--->以太网--->右键属性--->TCP/IPv4--->IP地址(192.168.1.3)--->子网掩码(255.255.255.0)--->默认网关(192.168.1.1)Ubuntu配置SystemSettings--->Network--->wired--->右下角Options--->IPv4Sett......
  • 解决 NVIDIA Windows has stopped this device because it has reported problems. (C
    场景当跑需要使用GPU算力的一些项目时候,需要用到CUDA,确保电脑是具有独立显卡的机子,但是怎么也没法让代码中的torch跑在GPU上;点击任务管理器查看"性能"下的GPU选项,看到运行中的并非是独立显卡而是集成显卡;点击设备管理器,发现NVIDIA显卡左下角有感叹号,双击发现里面显示......
  • stabilizationWindowSeconds 稳定窗口期
    节选自:https://github.com/kubernetes/enhancements/blob/master/keps/sig-autoscaling/853-configurable-hpa-scale-velocity/README.md#algorithm-pseudocode避免翻译错误导致误导直接粘贴原版1.StabilizationbeforescalingdownThismodeisusedwhentheuserexpects......
  • 把任意程序注册成windows服务, 并设置开机自动启动
    背景最近有个需求让我把原本部署在linux系统上的数据库和对数据库进行CRUD的java程序部署到windows系统上来.问题mysql和tdengine这两个数据库有windows版本,直接安装就行了,并且也已经自动注册成服务,可以自己设置开机自动启动(控制面板->本地服务)但是kafka和zookeepe......
  • FTP搭建及内网穿透(Windows环境)、两种(主动、被动)模式
    有两种方法一、使用IIS搭建FTP需要注意的是被动端口设置完后要重启一下【MicrosoftFTPService】服务才能生效Windows系统IIS搭建FTP服务如何配置被动端口?1、打开IIS管理器,点击左侧的服务器,进入服务器设置主页找到 FTP功能 中的 FTP防火墙支持 点击进入2、在数据通道端......
  • windows下通过net user add和powershell添加用户,sysmon仅仅采集到进程,而在windows安全
    执行操作:C:\Windows\system32>netuser/add"jack""fuckoff"命令成功完成。C:\Windows\system32>powershellWindowsPowerShell版权所有(C)MicrosoftCorporation。保留所有权利。尝试新的跨平台PowerShellhttps://aka.ms/pscore6PSC:\Windows\system32&g......