【发布时间】: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