请教:java通过jna调用C代码的问题

wly9721 2014-12-21 10:10:40
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没有被改动呢?
...全文
206 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
minuoli 2017-04-26
  • 打赏
  • 举报
回复
楼主好人啊,自己解决还贴出来,赞!!!!!!!!!!!
wly9721 2014-12-25
  • 打赏
  • 举报
回复
没有 人知道吗
wly9721 2014-12-25
  • 打赏
  • 举报
回复
还要import下才行 import com.sun.jna.ptr.ByteByReference;
wly9721 2014-12-25
  • 打赏
  • 举报
回复
我自己找到方法了 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 ByteByReference 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 ByteByReference(); Memory mymem = new Memory(300);//300个c字符 mymem.setString(0, ""); pEvent.pvBuffer.setPointer(mymem); WaitForEvent( pEvent); //WaitForEvent会改变pEvent的内容 System.out.println(Integer.toString(pEvent.id)); //输出结果:id的值被改变,不再是0 System.out.println(pEvent.pvBuffer.getPointer().getString(0)); //输出结果:pvBuffer的值被改变,是正确的值 } }

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧