0
我完全Java無知,但我必須解決此問題。我使用的是JNA並有一個文件:在界面中提供不同的方法名稱
public interface JRockey4ND extends Library {
public short rockey(short func, short[] handle, int[] lp1, int[] lp2, short[] p1, short[] p2, short[] p3, short[] p4, byte[] buffer);
public short RY_FIND=1;
public short RY_FIND_NEXT=2;
}
,並在另一個文件:
JRockey4ND rockey = (JRockey4ND) Native.loadLibrary(libFileName, JRockey4ND.class);
.
.
retval=rockey.rockey(rockey.RY_FIND,handle[0],lp1,lp2,p1,p2,p3,p4,buffer);
,它就像一個魅力。但根據平臺的不同,我必須使用Rockey
方法,而不是rockey
,因爲導出的符號命名爲Linux .so和Windows .dll之間的不匹配。我嘗試使用perl -pi -e 's/rockey/Rockey/g' lib.so
替換此文件中的符號名稱,但它不起作用(即使替換,此後仍無法找到'Rockey'符號)。
所以我的問題是,如何以最簡單的方式(不是最漂亮的)以編程方式解決這個問題。非常感謝!
在這種情況下,您可能不希望試圖控制從庫導出的符號的大小寫。爲什麼不檢查你正在運行的操作系統並進行適當的調用?請參閱http://stackoverflow.com/questions/228477/how-do-i-programmatically-determine-operating-system-in-java –
您可以嘗試使用反射,例如根據操作系統的不同,在JRockey4ND.class中查找「rockey」或「Rockey」方法。 – Thomas
謝謝@Thomas,聽起來非常好。但是,我應該如何修改我的界面,以便能夠提供兩種方法?我不能直接在界面主體中檢查OS。 – pikkewyn