我正在尝试从Windows API实现VerQueryValue的JNA接口。
它具有以下原生签名:
BOOL WINAPI VerQueryValue(
__in LPCVOID pBlock,
__in LPCTSTR lpSubBlock,
__out LPVOID *lplpBuffer,
__out PUINT puLen
);
我似乎已经成功转换了三个参数(1 - 指针,2 - WString,4 - IntByReference),但我坚持使用第三个参数。
什么是正确的翻译,以及如何访问存储在该缓冲区中的信息?
答案 0 :(得分: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);