我試圖在Windows 7上使用JNA調用Win32的CreateFile
函數,目標是執行this answer檢查一個文件是否被另一個進程使用。使用JNA調用CreateFile給出UnsatisfiedLinkError:查找函數'CreateFile'時出錯:找不到指定的過程
我到目前爲止的代碼是:
import com.sun.jna.Native;
import com.sun.jna.examples.win32.Kernel32;
public class CreateFileExample {
static int GENERIC_ACCESS = 268435456;
static int EXCLUSIVE_ACCESS = 0;
static int OPEN_EXISTING = 3;
public static void main(String[] args) {
Kernel32 kernel32 =
(Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
kernel32.CreateFile("c:\\file.txt", GENERIC_ACCESS, EXCLUSIVE_ACCESS,
null, OPEN_EXISTING, 0, null);
}
}
然而,運行此引發異常:
java.lang.UnsatisfiedLinkError: Error looking up function 'CreateFile': The specified procedure could not be found.
如果我在loadLibrary
調用一些無效的改變"kernel32"
然後,而不是我得到The specified module could not be found
,所以這表明DLL正在從庫路徑中正確找到,但是我打電話的方式有點問題CreateFile
。
任何想法我做錯了什麼?
CreateFile
在com.sun.jna.examples.win32.Kernel32
定義爲:
public abstract com.sun.jna.examples.win32.W32API.HANDLE CreateFile(
java.lang.String arg0,
int arg1,
int arg2,
com.sun.jna.examples.win32.Kernel32.SECURITY_ATTRIBUTES arg3,
int arg4,
int arg5,
com.sun.jna.examples.win32.W32API.HANDLE arg6);
嘗試寫功能感謝您,感謝上不需要手動'loadLibrary'尖端。 – mikej