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?