【问题标题】:Setting 'current working directory' while communicating with the DLL via JNA通过 JNA 与 DLL 通信时设置“当前工作目录”
【发布时间】:2012-03-06 14:20:03
【问题描述】:

我们使用com.sun.jna 包从外部库(DLL)调用方法。该库使用一些支持/缓存数据(DAT 文件),它写入“当前工作目录”中。 不幸的是,当我们将文件扩展名与我们的应用程序关联时(在 Windows 中双击打开我们的文件),当前工作目录被设置为正在打开的文件的目录,因此我们的 DLL 将其缓存数据写入到打开的文件。这样,如果我们从 HDD 上的不同位置打开许多文件,我们的 DLL 缓存将遍布整个系统。 我们还想控制保存任何缓存/临时/支持数据的位置 - 我们确实控制了它,但相关 DLL 的缓存除外。

在通过com.sun.jna 中的类与它通信的同时,我有什么方法可以为此 DLL 设置“当前工作目录”?我可以以某种方式覆盖此设置并将其传递给 JNA 吗?

提前感谢您的任何想法。 彼得

【问题讨论】:

  • 该库是否提供了一种更改其工作目录的方法,例如 OS 环境变量,该环境变量以类似 JDK 使用 JAVA_HOME 查找其 Java bin 文件夹的方式存储工作路径?
  • 您需要弄清楚 DLL 如何决定“当前工作目录”是什么。它可能是从环境变量 (getenv)、系统调用 (getcwd) 或使用文件的父目录读取它。查看您是否可以使用系统调用跟踪器(Linux 上的 dtrace/strace)来查看它是否正在使用其中之一。这会让你知道你需要设置/调整什么,以便 DLL 获得“正确”的目录。

标签: java jna native-code native-methods


【解决方案1】:

你可以在jvm中用System.setProperty("user.dir","yourpath");改变它,但我不知道这个改变是否会在jna调用后被dll继承。

【讨论】:

  • 嗨,谢谢你的回答——我之前已经试过了。不幸的是,设置这个并没有改变 DLL 使用的内容 - 看起来,DLL 从不同的源读取当前工作目录 - 可能是一些 win32 函数:-(。所以我想没有办法改变这个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多