首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java : GetProcAddress返回null

Java : GetProcAddress返回null
EN

Stack Overflow用户
提问于 2016-08-04 20:45:58
回答 1查看 588关注 0票数 0

下面的代码找不到LoadLibraryW

代码语言:javascript
复制
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声明如下:

代码语言:javascript
复制
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);
}

有人知道为什么吗?我犯了什么错?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-07 19:41:13

马丁·德拉布是对的。使用W32APIOptions.UNICODE_OPTIONS将一个Unicode字符串传递给Ansi函数。更改接口如下,解决了问题:

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38777122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档