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

时间:2011-06-03 21:59:49

标签: java windows api java-native-interface jna

我正在使用JNA并需要使用MapVirtualKeyEx函数。

这是签名:

UINT WINAPI MapVirtualKeyEx(

      __in         UINT uCode,
      __in         UINT uMapType,
      __inout_opt  HKL dwhkl
    );

有关签名的更多信息,请访问:http://msdn.microsoft.com/en-us/library/ms646307(v=vs.85).aspx

我试过了:

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

但它不匹配。我感觉这是造成问题的_inout_opt

我得到的错误是:The specified procedure could not be found.

        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中使用?

2 个答案:

答案 0 :(得分:1)

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

关于您的其他问题,请尝试JNAerator

答案 1 :(得分:1)

由于MapVirtualKeyEx()处理字符,因此有一个ANSI和WIDE版本。因此,该函数是MapVirtualKeyExA()/ MapVirtualKeyExW(),具体取决于您要使用的那个。