下面的代码找不到LoadLibraryW
private static FOREIGN_THREAD_START_ROUTINE getLoadLibraryWAddress() throws Win32Exception {
HMODULE module = Kernel32.INSTANCE.GetModuleHandle("KERNEL32");
if(module == null) {
Win32Exception.throwWithLastError("Failed to find KERNEL32 module");
}
FOREIGN_THREAD_START_ROUTINE address = Kernel32MissingFunctions.INSTANCE.GetProcAddress(module, "LoadLibraryW");
if(address == null) {
Win32Exception.throwWithLastError("Failed to find LoadLibraryW in KERNEL32 module");
}
return address;
}其中GetProcAddress声明如下:
public interface Kernel32MissingFunctions extends StdCallLibrary {
Kernel32MissingFunctions INSTANCE = (Kernel32MissingFunctions) Native.loadLibrary("kernel32",
Kernel32MissingFunctions.class, W32APIOptions.UNICODE_OPTIONS);
public static final int MEM_RELEASE = 0x8000;
public LPVOID VirtualAllocEx(HANDLE hProcess, LPVOID lpAddress, long dwSize, int flAllocationType, int flProtect);
public int VirtualFreeEx(HANDLE hProcess, LPVOID lpAddress, long dwSize, int dwFreeType);
public FOREIGN_THREAD_START_ROUTINE GetProcAddress(HMODULE hModule, String lpProcName);
}有人知道为什么吗?我犯了什么错?谢谢!
发布于 2016-08-07 19:41:13
马丁·德拉布是对的。使用W32APIOptions.UNICODE_OPTIONS将一个Unicode字符串传递给Ansi函数。更改接口如下,解决了问题:
public interface Kernel32MissingFunctions extends StdCallLibrary {
Kernel32MissingFunctions INSTANCE = (Kernel32MissingFunctions) Native.loadLibrary("kernel32",
Kernel32MissingFunctions.class, W32APIOptions.ASCII_OPTIONS);
public static final int MEM_RELEASE = 0x8000;
public LPVOID VirtualAllocEx(HANDLE hProcess, LPVOID lpAddress, long dwSize, int flAllocationType, int flProtect);
public int VirtualFreeEx(HANDLE hProcess, LPVOID lpAddress, long dwSize, int dwFreeType);
public LPVOID GetProcAddress(HMODULE hModule, String lpProcName);
}https://stackoverflow.com/questions/38777122
复制相似问题