An布 2020-08-05 11:20 采纳率: 0%
浏览 146
已结题

jna 调用c方法,参数和回调相关问题

一.描述
1.C的API方法一

图片说明

2.C的API方法二

图片说明

3.主要java代码
(1)XmNetJNA类

public interface XmNetJNA extends Library {

    XmNetJNA INSTANCE_NET = (XmNetJNA) Native.loadLibrary("XNetSDK", XmNetJNA.class);

    int XSDK_Init(XmInitParamStructure xminitParamStructure);

    void XSDK_UnInit();

    XmResultMsgStructure XSDK_DevLogin(XmLoginParamStructure xmLoginParamStructure, int nTimeout, int nSeq);
}

(2)MessageCallBack 类

public interface MessageCallBack extends StdCallLibrary.StdCallCallback {

    void invoke(int nMsgId, int nParam1);
}

(3)XmMsgCallBackImpl 类

public class XmMsgCallBackImpl implements MessageCallBack {

    @Override
    public void invoke(int nMsgId, int nParam1) {
        System.out.println("invoke ...");
    }
}

(4)测试类

public class AppTest 
{
    @Test
    public void testXSDK(){
        XmNetJNA xmNetJNA = XmNetJNA.INSTANCE_NET;
        System.out.println("init :" + xmNetJNA.toString());
        XmInitParamStructure xmInitParamStructure = new XmInitParamStructure();
        xmInitParamStructure.setnLogLevel(3);
        xmInitParamStructure.setpMsgCallBack(new XmMsgCallBackImpl());
        xmInitParamStructure.setpUserDate(null);
        int init = xmNetJNA.XSDK_Init(xmInitParamStructure);

        XmLoginParamStructure xmLoginParamStructure = new XmLoginParamStructure();
        xmLoginParamStructure.setsDevId("192.168.1.50");
        xmLoginParamStructure.setnDevPort(34567);
        xmLoginParamStructure.setsUserName("admin");
        xmLoginParamStructure.setsPassword("");
        XmResultMsgStructure login = xmNetJNA.XSDK_DevLogin(xmLoginParamStructure, 3000, 0);
        System.out.println("end...");
    }
}

二.报错及问题

1.测试方法testXSDK里,调用XSDK_DevLogin方法出错,报错如下:
图片说明

2.MessageCallBack 回调类是否编写错误,该怎么写

3.XmNetJNA类的XSDK_DevLogin方法的参数和返回值该怎么正确编写

望大牛们指导一下,谢谢!

######################以下为补充#####################

#define XSDK_HANDLE int
typedef int (CALLBACK *PXSDK_MessageCallBack) (XSDK_HANDLE hDevice, int nMsgId, int nParam1, int nParam2, int nParam3, const char *szString, void *pObject, int nSeq, void *pUserData);

////////////////////////////About XSDK////////////////////////////
typedef struct SXSDKInitParam
{
    int nLogLevel;
    PXSDK_MessageCallBack pMsgCallBack;
    void *pUserData;
}SXSDKInitParam;


////////Login////////
typedef enum EDEV_CNN_TYPE
{
    EDEV_CNN_TYPE_IP_DNS = 0,
    EDEV_CNN_TYPE_DAS    = 1,
}EDEV_NET_TYPE;

typedef struct SXSDKLoginParam
{
    char sDevId[128]; // ip/dns/sn
    int  nDevPort;
    char sUserName[64];
    char sPassword[64];
    EDEV_NET_TYPE  nCnnType;
}SXSDKLoginParam;
  • 写回答

2条回答 默认 最新

  • threenewbee 2020-08-05 13:40
    关注

    你这个说明文件连个参数类型都没有,找找 .h 文件,把函数原型,callback的函数原型贴出来看

    评论

报告相同问题?

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号