1 message in net.java.dev.jna.users[jna-users] Fwd: Help me how to map v...
FromSent OnAttachments
Timothy WallFeb 24, 2009 9:23 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:[jna-users] Fwd: Help me how to map void* in jna?Actions...
From:Timothy Wall (twal@dev.java.net)
Date:Feb 24, 2009 9:23:44 am
List:net.java.dev.jna.users

Begin forwarded message:

From: <chan@msn.com> Date: February 18, 2009 1:16:28 AM EST To: <twal@dev.java.net>, <todd@dev.java.net> Subject: Help me how to map void* in jna?

Hello, I'm trying to change my jni code to jna, but there are some problems on mapping C/C++ void* type to jna Pointer/ PointerByReference. In C++ header file, some functions as below:

#ifndef EPAS_STATUS #define EPAS_STATUS unsigned long #define EPAS_API __stdcall typedef void* EPAS_HANDLE; #endif EPAS_STATUS EPAS_API epas_GetProperty(EPAS_HANDLE hContextHandle /*[in]*/, unsigned long ulFlag /*[in]*/, void* pRefData /*[in]*/, void* pPropData /*[in][out]*/, unsigned long ulPropSize /*[in]*/ );

My Java mapped class:

public interface EpasAPI extends StdCallLibrary {

public EpasAPI INSTANCE = (EpasAPI) Native.loadLibrary("FT_ND_API", EpasAPI.class);

int epas_GetProperty(Pointer pointer, int ulFlag/* [in] */, Pointer pRefData/* [in] */, Pointer pPropData/* [in][out] */, int ulPropSize/* [in] */ ); }

class EpasAPITest{ /** Get hardware serial number */ public void testEpas_GetProperty() { PointerByReference sn = new PointerByReference(); int ret = lib.epas_GetProperty(handle.getValue(), //Device handle EpasAPI.EPAS_PROP_SERNUM, //flag indicate sn null, // Reserved, must be null sn.getPointer(), //Pointer to hold serial number 8); // length of sn, 8 bytes total Assert.assertEquals(0, ret); // return 0 on success System.out.println("Hardware Serial: " + ?); } }

On line of Assert, the return code of method is 0, means get serial number successfuly. But on line of println, I tried sn.getValue().getByteBuffer(0,8) etc, but it crashes the vm, how can I get the value of hardware number?