有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVA错误:结构。getFieldOrder()返回的名称与声明的字段名称不匹配(但它们确实匹配)

我试图混淆一些代码,我在主类中的一个方法引用了这个Shell32X。java类。主类中的方法(此处未显示)应该调用另一个具有管理清单的程序,以便出现UAC提示符。当我混淆主jar时,我得到一个指向这个被引用类的错误(如下):
java.lang.Error: Structure.getFieldOrder() on class MyMainClass returns names ([cbSize, dwHotKey, fMask, hInstApp, hKeyClass, hMonitor, hProcess, hwnd, lpClass, lpDirectory, lpFile, lpIDList, lpParameters, lpVerb, nShow]) which don't match declared field names
但据我所知,它们确实匹配。那么问题是什么呢

import java.util.Arrays;
import java.util.List;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Shell32;
import com.sun.jna.platform.win32.WinDef.HINSTANCE;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.WinReg.HKEY;
import com.sun.jna.win32.W32APIOptions;

public interface Shell32X extends Shell32
{
    Shell32X INSTANCE = (Shell32X)Native.loadLibrary("shell32", Shell32X.class, W32APIOptions.UNICODE_OPTIONS);

    int SW_HIDE = 0;
    int SW_MAXIMIZE = 3;
    int SW_MINIMIZE = 6;
    int SW_RESTORE = 9;
    int SW_SHOW = 5;
    int SW_SHOWDEFAULT = 10;
    int SW_SHOWMAXIMIZED = 3;
    int SW_SHOWMINIMIZED = 2;
    int SW_SHOWMINNOACTIVE = 7;
    int SW_SHOWNA = 8;
    int SW_SHOWNOACTIVATE = 4;
    int SW_SHOWNORMAL = 1;

    /** File not found. */
    int SE_ERR_FNF = 2;

    /** Path not found. */
    int SE_ERR_PNF = 3;

    /** Access denied. */
    int SE_ERR_ACCESSDENIED = 5;

    /** Out of memory. */
    int SE_ERR_OOM = 8;

    /** DLL not found. */
    int SE_ERR_DLLNOTFOUND = 32;

    /** Cannot share an open file. */
    int SE_ERR_SHARE = 26;



    int SEE_MASK_NOCLOSEPROCESS = 0x00000040;


    int ShellExecute(int i, String lpVerb, String lpFile, String lpParameters, String lpDirectory, int nShow);
    boolean ShellExecuteEx(SHELLEXECUTEINFO lpExecInfo);



    public static class SHELLEXECUTEINFO extends Structure
    {
        /*
         * DWORD     cbSize;
         * ULONG     fMask;
         * HWND      hwnd;
         * LPCTSTR   lpVerb;
         * LPCTSTR   lpFile;
         * LPCTSTR   lpParameters;
         * LPCTSTR   lpDirectory;
         * int       nShow;
         * HINSTANCE hInstApp;
         * LPVOID    lpIDList;
         * LPCTSTR   lpClass;
         * HKEY      hkeyClass;
         * DWORD     dwHotKey;
         * union {
         *  HANDLE hIcon;
         *  HANDLE hMonitor;
         * } DUMMYUNIONNAME;
         * HANDLE    hProcess;
         */

        public int cbSize = size();
        public int fMask;
        public HWND hwnd;
        public WString lpVerb;
        public WString lpFile;
        public WString lpParameters;
        public WString lpDirectory;
        public int nShow;
        public HINSTANCE hInstApp;
        public Pointer lpIDList;
        public WString lpClass;
        public HKEY hKeyClass;
        public int dwHotKey;

        /*
         * Actually:
         * union {
         *  HANDLE hIcon;
         *  HANDLE hMonitor;
         * } DUMMYUNIONNAME;
         */
        public HANDLE hMonitor;
        public HANDLE hProcess;

        @SuppressWarnings({ "unchecked", "rawtypes" })
        protected List getFieldOrder() {
            return Arrays.asList(new String[] {
                "cbSize", 
                "fMask", 
                "hwnd", 
                "lpVerb", 
                "lpFile", 
                "lpParameters",
                "lpDirectory", 
                "nShow", 
                "hInstApp", 
                "lpIDList", 
                "lpClass",
                "hKeyClass", 
                "dwHotKey", 
                "hMonitor", 
                "hProcess"
            });
        }
    }

}

共 (0) 个答案