Java (JNA) - 在 DLL (C++) 库中找不到函数

2024-01-23

我是Java新手,在google和stackoverflow中搜索了这个问题,找到了一些帖子,但仍然无法理解。

我想使用 Java 中的 DLL 库 (C++) 方法。我使用 JNA 来达到这个目的。 JNA 找到了我的库,但找不到我的方法:Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'LoadCurrentData': The specified procedure could not be found.

My code:

package javaapplication1;

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

public class JavaApplication1 {

    public interface LibPro extends Library {
        LibPro INSTANCE = (LibPro) Native.loadLibrary(
            (Platform.isWindows() ? "LibPro" : "LibProLinuxPort"), LibPro.class);

        public  short LoadCurrentData();
    }

    public static void main(String[] args) {
      LibPro sdll = LibPro.INSTANCE;
      sdll.LoadCurrentData();  // call of void function
    }
 }

我使用 Dependency Walker Tool 查看了我的 DLL,发现我的函数名称有前缀和后缀 - 它看起来像_LoadCurrentData@0

感谢您的回复!

附:我找到了有效的好例子http://tutortutor.ca/cgi-bin/makepage.cgi?/articles/rjna http://tutortutor.ca/cgi-bin/makepage.cgi?/articles/rjna(清单 6)。


我想说你需要应用正确的名称映射器,因为你注意到函数名称被破坏了,你需要注册CallMapper这将实现与编译器相同的修改。

这是一个相关条目来自JNA主页 https://github.com/twall/jna/blob/master/www/FrequentlyAskedQuestions.md#my-library-mapping-causes-an-unsatisfiedlinkerror:

使用转储实用程序检查导出函数的名称以确保它们匹配(Linux 上为 nm,取决于 Windows)。在 Windows 上,如果函数具有“@NN”形式的后缀,则在初始化库接口时需要传递 StdCallFunctionMapper 作为选项。通常,您可以使用函数映射器 (FunctionMapper) 来更改查找方法的名称,或者使用调用映射器 (InvocableMapper) 对方法调用进行更广泛的控制。

这是一个可能相关的问题:使用 StdCallFunctionMapper 重命名 JNA 中的 DLL 函数 https://stackoverflow.com/questions/518131/renaming-dll-functions-in-jna-using-stdcallfunctionmapper

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java (JNA) - 在 DLL (C++) 库中找不到函数 的相关文章

  • Java:使用indexOf方法根据另一个数组对数组进行排序

    我想根据另一个数组 索引 的排序顺序迭代两个数组 A B 在本例中为 10 34 32 21 String A a b c d String B e f g h int indexes 10 34 32 21 为这里的坏例子道歉 我已经更新
  • 将 Spring Data 随机(嵌入式)Mongo 端口与 NoSQL JUnit @Rule 结合使用

    我目前正在尝试编写一个使用 Spring Data Mongo 存储库的集成测试类 我使用由提供的嵌入式 Mongo 实例de flapdoodle embed mongo依赖性 Spring Data 文档指定我们只需要将这个依赖项放入项
  • 一般如何处理 CXF 请求处理程序中的输入参数?

    我一直在使用 apache CXF 版本 2 2 2 JAX RS 进行一些工作 我试图在调用业务方法之前在 CXF 请求处理程序中引入数据验证层 幸运的是 我在请求处理程序 DataValidationHandler 中遇到输入参数处理问
  • 将图像作为 JPanel 的背景

    我是 Java 新手 目前正在创建一个带有图形的游戏 我有这个课程从JFrame 在这个班级里 我有很多JPanel需要图像作为背景 据我所知 为了能够在 JPanel 中绘制图像 我需要一个从 JPanel 扩展的单独的类以及该类的pai
  • 是什么使得 java 中的枚举不可实例化?

    我知道一个枚举 enum Year First Second Third Fourth 被转换成 final class Year extends Enum
  • JavaFx ComboBox 绑定混乱

    我有一个 I18N 实现 它通过属性绑定 JavaFX UI 元素 例如 def translateLabel l Label key String args Any Unit l textProperty bind createStrin
  • 为什么需要使用java.util.TimerTask的purge()?

    Timer cancel 取消任务 Timer purge 从此计时器的任务队列中删除所有已取消的任务 如果我不在这里使用 purge 会发生什么 当计时器的任务队列已满时会发生什么 除非您正在运行的计时器数量过多 否则实际计时器行为不会发
  • getAnnotations() 为空

    我想在我的应用程序中使用注释 因此 我为注释创建了 hello world 如下示例 public class HelloAnnotation Foo bar Hello World public String str public sta
  • Java RMI 通过互联网

    我正在用 Java 开发一个游戏 使用 RMI 进行所有网络通信 RMI 允许我调用服务器上的方法 但这对我来说还不够 我还希望服务器能够在连接的客户端之间传播消息 我的客户端查找服务器 它的接口扩展了远程 并在其上注册 它允许服务器知道谁
  • Android - Firebase - 保存新数据而不覆盖旧数据

    创建此问题是因为我之前的问题包含 2 个问题 而不是将其缩小到 1 Aim 用户将能够存储新数据而不会覆盖之前提交的数据 描述 目前 当用户输入新报告时 事件报告节点中的用户事件报告数据将被覆盖 用户发送的旧事件报告中的数据应与新数据一起保
  • MySQL 中电话号码的最佳数据类型是什么?它的 Java 类型映射应该是什么?

    我正在将 MySQL 与 Spring JDBC 模板一起用于我的 Web 应用程序 我需要存储仅包含数字的电话号码 10 我对使用数据类型的数据类型有点困惑 MySQL 中最适合它的数据类型是什么 为此 Bean POJO 类中的 Jav
  • spring启动时如何加载@Cache?

    我正在使用 spring cache 来改进数据库查询 其工作原理如下 Bean public CacheManager cacheManager return new ConcurrentMapCacheManager books Cac
  • 如何正确安装mysqlconnecter java?

    上网冲浪后 我意识到我应该在系统环境变量中设置类路径连接器 jar 文件的路径文件我这样做了 并在命令行中输入此命令我有这个 C Users User gt echo classpath D classpath mysql connecto
  • 如何使用spring data mongodb在mongodb中创建视图

    如何使用spring data mongodb在mongodb中创建视图 谢谢 您可以在需要的地方注入 org springframework data mongodb core MongoTemplate 类型的 bean 并使用其方法之
  • 如何在 Spring Boot 中访问 application.properties 文件中定义的值

    我想访问中提供的值application properties e g logging level org springframework web DEBUG logging level org hibernate ERROR loggin
  • 如何从 Java 类调用 Kotlin 类

    我需要将意图从 java 活动传递到 Kotlin 活动 Java活动ProfileActivity class Intent selectGameIntent new Intent ProfileActivity this kotlin
  • 如何找到类路径上具有特定方法注释的所有类?

    我想在Java中实现一个基于注释的初始化机制 具体来说 我定义了一个注释 Retention RetentionPolicy RUNTIME Target ElementType METHOD public interface Initia
  • 定时器启动/停止参数

    自从加入这个社区以来 我在技能和进步方面取得了突飞猛进的进步 你们都是一个巨大的帮助 我无法提供一个计时器 该计时器已在启动和停止时实现了某些参数 我要么收到错误消息 局部变量计时器可能尚未初始化 要么没有收到错误消息 但什么也没有发生 也
  • 确定方法调用顺序的接口设计模式

    我想创建一个具有多种方法的 Java 接口 但我希望界面的用户只能按照我定义的顺序或顺序调用方法 例如buyTicket 不应在此之前调用reserveTicket 问 有没有设计模式或任何关于如何做到这一点的提示 我考虑过 A 接口被包装
  • 如何使用 itext 在 pdf 页脚上添加页码,它应该照顾其宽度?

    我的代码示例如下 Override public void onEndPage PdfWriter writer Document document addFooter writer private void addFooter PdfWr

随机推荐

  • C++ 中的 IPv6 连接测试

    是否有任何 C 函数可以测试运行我的程序的计算机是否支持 IPv6 连接 我需要知道类似此页面的结果http test ipv6 com http test ipv6 com 但是在 C 中 EDIT 我试图使用getifaddrs 但返回
  • 如何从 FTP 获取文件(使用 C#)?

    现在我知道如何将文件从一个目录复制到另一个目录 这非常简单 但现在我需要对 FTP 服务器上的文件执行相同的操作 你能给我一些如何在更改文件名的同时从 FTP 获取文件的示例吗 看一眼如何 使用 FTP 下载文件 http msdn mic
  • 将动态加载的自定义 ASP 控件的脚本注册到 DOM

    我在 a 期间加载我的 ascx 控件postback 下拉更改事件 父级 C private void ddlChange MyControl myCtr CallScript Page LoadControl Controls MyCo
  • 通过单击按钮填充 Javascript 中的文本框 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图通过单击表单按钮来填充表单上的
  • WebClient DownloadString UTF-8 不显示国际字符

    我尝试将网站的 html 保存在字符串中 该网站具有国际字符 即使我将编码设置为与网站字符集相对应的 UTF 8 它们也不会保存到字符串中 这是我的代码 using WebClient client new WebClient client
  • 优化多重连接

    我正在尝试找出一种方法来加速一个特别繁琐的查询 该查询按日期在几个表中聚合一些数据 下面是完整的 丑陋的 查询以及EXPLAIN ANALYZE以表明它是多么可怕 如果有人可以看一下 看看他们是否能发现任何重大问题 很可能 我不是 Post
  • 是否可以使用 Mongoose 在 MongoDB 中创建新数据库?

    我想知道是否可以使用 Mongoose 在 MongoDB 中创建一个新数据库 我在 Node 上运行 并且我知道 Node 的 MongoDB 驱动程序可以做到这一点 但我想知道是否可以仅从 Mongoose 中做到这一点 有没有相当于d
  • 对于 OS X 特定代码,我应该使用什么 C 预处理器条件?

    对于 OS X 特定代码 我应该使用什么 C 预处理器条件 如果我为 OS X 进行编译 则需要包含特定的库 如果为 Linux 进行编译 则需要包含不同的标头 我知道有 APPLE 但我不知道这是否是 OS X 10 x 的当前条件 此操
  • 如何在云(AWS、heroku 等)中跨多个节点建立时钟同步?

    我想在云中运行一个大型节点集群 AWS Heroku 或者可能是自我管理的 VMS 其时钟必须与预定义的容差同步 我正在寻找大约 200 毫秒的容差 这意味着 如果我有 250 个节点 那么这 250 个节点之间的最大时钟差异不应超过 20
  • SQL 查询:在给定时间间隔内处于活动状态的所有 ID 的列表,按开始时间排序

    我有一个包含轨道点 x y 坐标 的 MySQL 表 每行包含 TrackID 时间戳以及该轨道在给定时间点的 X 和 Y 位置 我想要的是在给定时间间隔 tmin tmax 内处于活动状态的所有 TrackID 的列表 按其开始时间排序
  • YouTube 搜索 API 与 YouTube 上的手动搜索返回不同的结果

    我正在使用 YouTube v3 API 来搜索视频 在某些情况下 从 API 返回的结果与我在 YouTube 网站上手动使用完全相同的查询字符串时得到的结果完全不同 请任何人解释为什么会发生这种情况 例如搜索 Zombie Huntin
  • 如何使标签显示带有不同颜色字母的FormattedString?

    我正在使用 FormattedString 在 Xamarin Forms 上的标签上显示自定义文本 我想要实现的是更改一个或多个元素的颜色 例如 但即使我正在更改颜色 标签也只会显示具有相同颜色的所有美元符号 这是视图上的标签
  • 在 Bukkit 插件中将赏金参数读取为整数

    这只是该插件的开始 还会有更多 这就是我想要的 对于 bounty
  • 从初始视口启用“缩小”

    这是在我的 Android Chrome 浏览器上处理视口元标记时出现的问题 未在其他浏览器中测试 我想要一个可以缩小的网页 而不仅仅是放大 如果我用这个 我可以缩小到 0 5 的比例 0 5 是 初始 缩放 正如我所期望的那样 但如果我用
  • C# 对象引用如何在内存中/运行时(在 CLR 中)表示?

    我很想知道 C 对象引用在运行时 在 NET CLR 中 如何在内存中表示 我想到的一些问题是 对象引用占用多少内存 在类的范围和方法的范围中定义时有什么不同吗 它所在的位置是否根据此范围 堆栈与堆 而有所不同 对象引用中维护的实际数据是什
  • 在回形针中调整原始图像的大小

    回形针将原始图像存储在 original 文件夹中 有没有办法调整原始图像的大小 我想缩小原件以节省光盘空间 因此 例如 如果访问者上传一张 2592x1936 的照片 我想将其存储为 1024x1024 就像我们在 styles 中设置
  • 带有 GeometryReader 和 paddings 的 SwiftUI HStack

    在我的 iOS 应用程序中 我想放置两个宽度相同的视图 以便它们填充父视图的整个宽度 为此 我使用 GeometryReader 它破坏了自动布局 但自动布局不起作用 并且不会自动计算该视图的高度 TestView 的高度未确定 所以我无法
  • 如何像 iGoogle 一样使用可拖动部分? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 查看 iGoogle 时 每个部分都可以拖放到页面上的任何其他位置 然后保存页面的状态 我很好奇这是如何完成的 因为我想提供此功能作为
  • 如何获取 Vim 中所有已安装配色方案的列表?

    有没有办法获取 Vim 中所有已安装配色方案的列表 这样就可以很容易地选择一个 而无需查看 vim目录 Type colorscheme then Space followed by TAB 或者正如彼得所说 colorscheme the
  • Java (JNA) - 在 DLL (C++) 库中找不到函数

    我是Java新手 在google和stackoverflow中搜索了这个问题 找到了一些帖子 但仍然无法理解 我想使用 Java 中的 DLL 库 C 方法 我使用 JNA 来达到这个目的 JNA 找到了我的库 但找不到我的方法 Excep