Не удалось найти указанную процедуру (MapVirtualKeyEx) JNA (Java) - PullRequest
1 голос
/ 04 июня 2011

Я использую 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 ]

1 голос
/ 04 июня 2011

Поскольку MapVirtualKeyEx () работает с символами, существует версия ANSI и WIDE. Поэтому функция MapVirtualKeyExA () / MapVirtualKeyExW () зависит от того, какую функцию вы хотите использовать.

1 голос
/ 04 июня 2011

Для параметра, который является как входным, так и выходным параметром, вам необходимо использовать один из ссылочных типов JNA. Если HKL действительно int, используйте IntByReference. Если это структура, вам нужно определить соответствующую структуру.

Что касается вашего другого вопроса, попробуйте JNAerator .

...