2011-02-03 53 views
0

我試圖從Windows API實現一個JNA接口到VerQueryValue如何實現JNA接口到LPVOID緩衝區?

它具有以下本地簽名:

BOOL WINAPI VerQueryValue(
    __in LPCVOID pBlock, 
    __in LPCTSTR lpSubBlock, 
    __out LPVOID *lplpBuffer, 
    __out PUINT puLen 
); 

我似乎已經成功地轉換三個參數(1 - 指針,2 - WSTRING,4 - IntByReference),但我堅持與第三。

什麼是正確的翻譯,以及如何訪問存儲在緩衝區中的信息?

回答

3

我會傾向於說正確的映射將是:

int VerQueryValue(Pointer pBlock, String lpSubBlock, PointerByReference lplpBuffer, IntByReference puLen); 

因爲我從來沒有使用過VerQueryValue下面的代碼是如何使用結果的猜測:

//other parameters & method calls ... 
//empty constructor : VerQueryValue will valuate the pointed value. 
PointerByReference lplpBuffer = new PointerByReference(); 
//empty constructor : VerQueryValue will valuate the pointed value. 
IntByReference puLen = new IntByReference(); 
int rc = YourClassName.VerQueryValue(pBlock,lpSubBlock,lplpBuffer,puLen); 
//Check rc & co 
//use the result 
byte[] resBytes = lplpBuffer.getValue().getByteArray(0,puLen.getValue()); 
//if it's a String 
String resString = new String(resBytes, ENCODING); 
+0

完美地工作, 謝謝! – etheros 2011-02-05 14:52:15