最近在學習jna,發現dll文件能能否成功調用取決於jdk位數。
32位jdk只能使用32位的dll,64位jdk只能使用64位的dll,否則位數不對應的話報的錯是
"Exception in thread "main" Java.lang.UnsatisfiedLinkError: Unable to load library 'testx64': 找不到指定的模塊。"
它為什么是直接無視位數不符合的dll?仔細一想,代碼搜尋dll文件時是按名字來的,那放2個同名的test.dll一個是64位的一個是32位的,自然就能搜到與自己對應的,這不就可以方便的解決兼容問題,連代碼都不用改了。
但是還有一個問題,一個文件夾內文件時不能重名的,怎么放同名不同位的文件?原來jna調用dll不單會搜索項目下的dll,也會搜索在系統環境Path里各個文件,在里面填自己建兩個文件分別放同名不同位的文件就行了,
例如分別在C:\Program Files和C:\Program Files (x86)文件件中創建文件夾存放相應的dll文件。