2012-03-06 73 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

相關問題