java吧 关注:1,251,920贴子:12,737,256
  • 10回复贴,共1
求助

JNA调用c++的动态链接库出现了一个奇怪的问题

只看楼主收藏回复

需求∶java通过jna调用一个动态链接库a.so(.so),动态链接库封装报文,然后请求服务器,服务器返回报文,然后解码,最后得到oracle中某个加密后的字符串,最大长度是41个字节。
调用链路一:java通过jna按顺序分别调用了a.so中方法1,2,3,4,5完成上面一整个封装请求报文,解密应答报文的动作,最终拿到了数据库返回的结果,一段加密字符串,字符串实际长度有9个字节,但是输出到控制台时候发现,第1-4个字符串显示正常,第5-8个字符串乱码,第9个字符串正常。
调用链路二:java通过jna调用a.so中的一个all (),该方法内部按顺序调用了方法1,2,3,4,5。同样完成了整个业务流程,此时也返回了同样的加密字符,但输出到控制台,它9个字符都没有出现乱码。
后面经过测试发现,只要返回的字符串,超过4个字节,就会乱码,如果只有4个字节或者少于4个字节,都不会乱码。请问下有人知道这是怎么一回事儿吗?两个链路的调用环境完全一样的。都是在同一台linux服务器上调用的。


IP属地:广东来自Android客户端1楼2024-01-31 20:32回复
    有人吗


    IP属地:广东来自Android客户端2楼2024-01-31 21:16
    回复
      确认两种方法中12345的入参完全一致?jna支持的是原始c类型映射,是不是中间过程传参有误。


      IP属地:河北来自Android客户端3楼2024-02-01 00:05
      收起回复