关于JAVA调用C的DLL库中的函数问题,传入一个含有指针的结构体指针 190
比如有个结构体:typedefstruct_SSM_EVENT{WORDwEventCode;//事件编码intnReference;//参考值PVOIDpvBuffer...
比如有个结构体:
typedef struct _SSM_EVENT
{
WORD wEventCode; //事件编码
int nReference; //参考值
PVOID pvBuffer; //事件信息缓冲指针
DWORD dwParam; //输出参数
}SSM_EVENT, *PSSM_EVENT;
PVOID是一个指向300空间的一个指针,可以理解为一个char[]数组,现在java需要调用c里dll库的一个函数,其中一个参数为该结构体指针*PSSM_EVENT,传入时有的参数含有值。1.那么我该如何传入这个带有值的参数。2.我该怎么获取这个结构体的值,尤其是指针的值。无论是使用jnative,jna,jin什么样的第三方jar包都可以。
结构体里面含有一个指针的属性,在JAVA分配创建一段内存,我通过第三方JAR包传递并返回这段内存,该JAR包提供的函数可以读取这段内存里面的值,但现在由于上述的结构,这段内存里面含有一个指针值,也就是说在返回的这段内存里面的值里,由一个指针地址值,但我需要的是这个指针指向的地址里面的数据,而不是这个指针地址值,我该怎么取呢?现在这个是最主要的问题了 展开
typedef struct _SSM_EVENT
{
WORD wEventCode; //事件编码
int nReference; //参考值
PVOID pvBuffer; //事件信息缓冲指针
DWORD dwParam; //输出参数
}SSM_EVENT, *PSSM_EVENT;
PVOID是一个指向300空间的一个指针,可以理解为一个char[]数组,现在java需要调用c里dll库的一个函数,其中一个参数为该结构体指针*PSSM_EVENT,传入时有的参数含有值。1.那么我该如何传入这个带有值的参数。2.我该怎么获取这个结构体的值,尤其是指针的值。无论是使用jnative,jna,jin什么样的第三方jar包都可以。
结构体里面含有一个指针的属性,在JAVA分配创建一段内存,我通过第三方JAR包传递并返回这段内存,该JAR包提供的函数可以读取这段内存里面的值,但现在由于上述的结构,这段内存里面含有一个指针值,也就是说在返回的这段内存里面的值里,由一个指针地址值,但我需要的是这个指针指向的地址里面的数据,而不是这个指针地址值,我该怎么取呢?现在这个是最主要的问题了 展开
3个回答
展开全部
在java里定义对应的,分配地址空间大小相同的结构体。
java应该也可以定义struct.
比如dword可以定义为long.
把c中的pvoid定义找出来,也定义一个struct.
java应该也可以定义struct.
比如dword可以定义为long.
把c中的pvoid定义找出来,也定义一个struct.
更多追问追答
追问
定义结构体没有问题,现在关键是JAVA没有指针的概念,而dll库需要传递的是一个结构体指针,关键是指针,怎么传。现在这个问题已经解决了,还有另外一个问题,请看我的追加提问
追答
c还是可以重调java的,可以参考网上资料,指针地址什么的,可以传递。这个你自己考虑一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没做过这么复杂的。
但你想调用DLL,
应该是通过native生成的方法。你通过这个方法中的参数进行交互。
但你想调用DLL,
应该是通过native生成的方法。你通过这个方法中的参数进行交互。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得用java调用这个肯定是使用jni了。这个是无疑了,网上jni的api和教程挺多的。查查就知道了。然后说得到指针指向的值而不是地址,这步操作是c语言的语法问题,也就是说c的源码取值和取地址那里写对了就可以了。jni只是用来调用的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询