我正在使用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中使用?
答案 0 :(得分:1)
对于既是输入参数又是输出参数的参数,您将需要使用其中一种JNA引用类型。如果HKL确实是int,请使用IntByReference。如果它是结构,则需要定义相应的结构。
关于您的其他问题,请尝试JNAerator。
答案 1 :(得分:1)
由于MapVirtualKeyEx()处理字符,因此有一个ANSI和WIDE版本。因此,该函数是MapVirtualKeyExA()/ MapVirtualKeyExW(),具体取决于您要使用的那个。