我們使用com.sun.jna
包來從外部庫(DLL)調用方法。該庫使用一些支持/緩存數據(DAT文件),它在「當前工作目錄」中寫入。 不幸的是,當我們將我們的文件擴展名與我們的應用程序相關聯(在Windows中雙擊打開我們的文件時),然後將當前工作目錄設置爲正在打開的文件的目錄,因此我們的DLL將其緩存數據寫入打開的文件。這樣,如果我們打開硬盤上不同位置的許多文件,我們將在整個系統中使用我們的DLL緩存。 我們也想要控制這個地方,我們在那裏保存任何緩存/臨時/支持數據 - 我們確實控制這個地方,除了有問題的DLL的緩存。在通過JNA與DLL進行通信時設置'當前工作目錄'
有沒有什麼辦法讓我爲這個DLL設置'當前工作目錄',同時通過com.sun.jna
的類與它進行通信?我能否以某種方式覆蓋此設置並將其傳遞給JNA?
謝謝你的任何想法。 Piotr
庫是否提供了一種方式來改變其工作目錄,就像一個OS環境變量一樣,該環境變量以類似的方式存儲工作路徑,JDK使用JAVA_HOME來查找其Java bin文件夾? – ecle 2012-03-06 15:36:46
你需要弄清楚DLL是如何決定「當前工作目錄」是什麼的。它可能是從環境變量(getenv),系統調用(getcwd)或使用文件的父目錄讀取它。看看你是否可以使用系統調用跟蹤器(linux上的dtrace/strace)來查看它是否正在使用其中之一。這將讓你知道你需要設置/調整以使DLL獲得「正確」的目錄。 – technomage 2012-03-09 19:30:48