2011-06-03 99 views
1

我正在使用JNA並需要使用MapVirtualKeyEx函數。無法找到指定的程序(MapVirtualKeyEx)JNA(Java)

下面是簽名:在簽名

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 /南國防軍使用的自動化的方式?

+0

注:我已閱讀此http://stackoverflow.com/questions/5156055/jna-the-specified-procedure-could-not-be-found和其他幾個,但它沒有幫助。 – David 2011-06-03 22:17:39

回答

1

由於MapVirtualKeyEx()處理字符,所以它有一個ANSI和WIDE版本。因此,該函數是MapVirtualKeyExA()/ MapVirtualKeyExW(),取決於您要使用哪一個。

+0

MapVirtualKeyExA()工作。 – David 2011-06-03 22:37:34

1

對於既是輸入參數又是輸出參數的參數,您需要使用其中一種JNA參考類型。如果HKL確實是一個int,則使用IntByReference。如果它是一個結構體,你需要定義一個對應的結構體。您可以嘗試JNAerator

+0

我一直在尋找很久,找不到HKL的含義。感謝JNAerator。 +1 – David 2011-06-03 22:42:41

相關問題