2011-02-03 2 views
0

Windows API에서 VerQueryValue에 JNA 인터페이스를 구현하려고합니다. LPVOID 버퍼에 JNA 인터페이스를 구현하려면 어떻게해야합니까?

그것은 다음과 같은 기본 서명했습니다 (- 포인터 - 2 형식 wstring, 4 - IntByReference 1),하지만 세 번째에 붙어

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

내가 갖고있는 것 같다 성공적으로 매개 변수의 세 가지 변환 .

올바른 번역은 무엇이며 어떻게 해당 버퍼에 저장된 정보에 액세스 할 수 있습니까?

답변

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

+0

당신은 환영합니다. – Cerber

관련 문제