找不到指定的过程(MapVirtualKeyx)JNA(Java)

找不到指定的过程(MapVirtualKeyx)JNA(Java),java,windows,api,java-native-interface,jna,Java,Windows,Api,Java Native Interface,Jna,我正在使用JNA,需要使用MapVirtualKeyx函数 签名如下: UINT WINAPI MapVirtualKeyEx( __in UINT uCode, __in UINT uMapType, __inout_opt HKL dwhkl ); 有关签名的更多信息可在此处找到: 我试过这个: int MapVirtualKeyEx (int uCode, int nMapType, int dwhkl);

我正在使用JNA,需要使用MapVirtualKeyx函数

签名如下:

UINT WINAPI MapVirtualKeyEx(

      __in         UINT uCode,
      __in         UINT uMapType,
      __inout_opt  HKL dwhkl
    );
有关签名的更多信息可在此处找到:

我试过这个:

int MapVirtualKeyEx (int uCode, int nMapType, int dwhkl);
但它不匹配。我感觉是
\u inout\u opt
引起了问题

我得到的错误是:
找不到指定的过程。

        static interface User32 extends Library {
                public static User32 INSTANCE = (User32) Native.loadLibrary("User32", 
                User32.class);

                int MapVirtualKeyEx (int uCode, int nMapType, int dwhkl);
            }


            private static void test(int keyCode)
            {

                int code = User32.INSTANCE.MapVirtualKeyEx(key, MAPVK_VK_TO_VSC,
                    134809609); //The number is the keyboard ID, it's temporary.

            }

我还有另一个问题:是否有某种自动转换API签名的方法,以便在JNI/JNA中使用它?

对于既是输入参数又是输出参数的参数,您需要使用一种JNA引用类型。如果HKL确实是int,请使用IntByReference。如果它是一个结构,则需要定义相应的结构


至于你的另一个问题,试试。

因为MapVirtualKeyx()处理字符,所以它有一个ANSI和更广泛的版本。因此,该函数是mapVirtualKeyXA()/mapVirtualKeyXW(),具体取决于您要使用的函数。

注意:我已经阅读了这篇文章和其他几篇文章,但都没有帮助。我已经搜索了很长时间,找不到HKL的含义。谢谢你的帮助+1.