不抵岁月稠 2021-10-18 16:59 采纳率: 0%
浏览 92
已结题

Java使用JNA调用dll接口报Invalid memory access错误

问题是这样的:
我要调用C++的dll里面有两个接口:
A接口:

int __stdcall sync_OpenTagQuery(HSYNCBASE hDB, const char *szNameMask, const char *szComentMask, int nNodeId, HSTMT *hStmt);

B接口:

int __stdcall sync_OpenHisQuery(HSYNCBASE hDB , int nTagId, S_TIME tmBeginTime,S_TIME tmEndTime, int nStep, HSTMT *hStmt);

相关数据结构:

typedef void*  HSYNCBASE; 
typedef void*  HSTMT; 

typedef struct {
    unsigned char year;  //年 
    unsigned char mon;   //月
    unsigned char day;   //日
    unsigned char hour;  //时
    unsigned char min;   //分
    unsigned char sec;   //秒
} S_TIME; //秒级时间

Java中的实现:
a接口:

int sync_OpenTagQuery(Pointer hDB, String szNameMask, String szComentMask, int nNodeId, PointerByReference hStmt);

b接口:

int sync_OpenHisQuery(Pointer hDB, int nTagId, S_TIME tmBeginTime, S_TIME tmEndTime, int nStep, PointerByReference hStmt);

相关数据结构:

public class S_TIME extends Structure  {
    public byte year;  //年
    public byte mon;   //月
    public byte day;   //日
    public byte hour;  //时
    public byte min;   //分
    public byte sec;   //秒
}

目前A接口对应的a接口已调通,但是B接口对应的b接口一调用就报以下错误 :

img

查了很多资料都是说参数类型不匹配的导致的,但是又具体找不到哪里有问题,希望有懂的朋友能指点一二,万分感谢

  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-10-20 10:30
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

问题事件

  • 系统已结题 10月26日
  • 创建了问题 10月18日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效