请教:java通过jna调用C代码的问题
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Structure;
public class MyTest {
public interface MyApi extends Library
{
public static class EVENT extends Structure{
public int id;
public byte [] pvBuffer; //定义一个byte数组存放数据
}
MyApi INSTANCE = (MyApi)Native.loadLibrary("MyTest", MyApi.class); //加载C中的动态库MyTest.dll
public int WaitForEvent(EVENT pEvent); //WaitForEvent是MyTest.dll 提供的接口函数,作用是使用pEvent来接收获取到的事件
public static void main(String [] args)
{
EVENTpEvent=new EVENT();
pEvent.i=0;
pEvent.pvBuffer=new byte[300];
WaitForEvent( pEvent); //WaitForEvent会改变pEvent的内容
System.out.println(Integer.toString(pEvent.id)); //输出结果:id的值被改变,不再是0
System.out.println(new String(pEvent.pvBuffer)); //输出结果:pvBuffer的值不变,依然是空的
}
}
上面代码是java通过jna调用C的代码,调用 WaitForEvent( pEvent)会修改对象pEvent中的内容,但是实际测试结果是该对象的id确实被修改了,但是pvBuffer没有被改变。
请大家帮忙分析,这是什么原因呢?按照道理 ,pEvent是对象,传的参数是对象,对象的内容应该是可以被修改的啊?并且id确实被改了,单单为何是pvBuffer没有被改动呢?