1. 程式人生 > >JNA呼叫dll問題

JNA呼叫dll問題

Unable to load library ‘XXX.dll’: Native library (win32-x86/XXX.dll…

這是我第一次遇見這個問題,找了很多天,希望能給您提供思路!!! JAN呼叫dll : 問題一:關於JDK 與 dll檔案 32位/64位的問題 參考:https://blog.csdn.net/sychel/article/details/54884132 通過cmd–>java -version 檢視JDK(下圖為32位) 在這裡插入圖片描述 檢視dll檔案可以使用工具檢視 如果沒有工具請 參考:https://blog.csdn.net/u012611644/article/details/83060983

問題二: 註冊(regsvr32 XXX.dll) 我這邊是將第三方給的壓縮包全部複製到\windows\system32下 (可能會出現需要管理員許可權的問 題,user32.dll 與msvcp60.dll 複製不進去)如果出現相容問題 請在cmd上右鍵 以管理員身份運 行,然後註冊,如果還是有問題可以試著 進入(cd) \windows\sysWOW64下注冊(我這邊出現 下圖中的錯誤 ,但已經註冊成功了!如果有人知道為什麼請指點 我是小白一個) 在這裡插入圖片描述 問題三:下載JNA 我這邊是用的springBoot 在pom.xml檔案中加入配置 如果不是請下載JNA的jar包!

             <dependency>
              <groupId>net.java.dev.jna</groupId>
		  <artifactId>jna</artifactId>	
		    <version>4.1.0</version>
		</dependency>

將dll檔案與新建的類放在一個包下並測試

public class HelloWorld {
		public interface CLibrary extends Library {
			String dllPath = CLibrary.class.getResource("").getPath().replaceFirst("/","").replaceAll("%20"," ")+"zhiGongHiscomminterface.dll";
			CLibrary INSTANCE = (CLibrary)Native.loadLibrary(dllPath,CLibrary.class);
	    }
			public static void main(String[] args) {
	        System.out.println(CLibrary.dllPath);
	        System.out.println("===============================");
	        System.out.println(CLibrary.INSTANCE);
	    }
	}

** 問題四:左斜槓 與 右斜槓 我最後在伺服器上載入dll檔案是 測試路徑的dllPath 載入不到(這個是左斜槓的)當我把路徑的左斜槓改為由斜槓時就可以載入到(不明白為什麼(>_<) ! ) 注:左斜槓為單線 右斜槓為雙線