2012-03-06 40 views
0

我们使用com.sun.jna包来从外部库(DLL)调用方法。该库使用一些支持/缓存数据(DAT文件),它在“当前工作目录”中写入。 不幸的是,当我们将我们的文件扩展名与我们的应用程序相关联(在Windows中双击打开我们的文件时),然后将当前工作目录设置为正在打开的文件的目录,因此我们的DLL将其缓存数据写入打开的文件。这样,如果我们打开硬盘上不同位置的许多文件,我们将在整个系统中使用我们的DLL缓存。 我们也想要控制这个地方,我们在那里保存任何缓存/临时/支持数据 - 我们确实控制这个地方,除了有问题的DLL的缓存。在通过JNA与DLL进行通信时设置'当前工作目录'

有没有什么办法让我为这个DLL设置'当前工作目录',同时通过com.sun.jna的类与它进行通信?我能否以某种方式覆盖此设置并将其传递给JNA?

谢谢你的任何想法。 Piotr

+0

库是否提供了一种方式来改变其工作目录,就像一个OS环境变量一样,该环境变量以类似的方式存储工作路径,JDK使用JAVA_HOME来查找其Java bin文件夹? – ecle 2012-03-06 15:36:46

+0

你需要弄清楚DLL是如何决定“当前工作目录”是什么的。它可能是从环境变量(getenv),系统调用(getcwd)或使用文件的父目录读取它。看看你是否可以使用系统调用跟踪器(linux上的dtrace/strace)来查看它是否正在使用其中之一。这将让你知道你需要设置/调整以使DLL获得“正确”的目录。 – technomage 2012-03-09 19:30:48

回答

0

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

+0

嗨,谢谢你的回答 - 我已经尝试过了。不幸的是,设置这个,不会改变,DLL使用什么 - 看起来,DLL从不同的来源读取当前工作目录 - 可能是一些win32函数:-(。所以我想没有办法改变它? – 2012-03-07 08:49:37

相关问题