找回密码
 加入
搜索
查看: 2013|回复: 6

[网络通信] [已解决]Dll函数返回值类型为结构体指针,如何获取返回值结构体内的值

[复制链接]
发表于 2021-6-10 21:35:05 | 显示全部楼层 |阅读模式
本帖最后由 风过无痕 于 2021-6-26 10:09 编辑

最近在做一个海康威视监控的查看工具,SDK也能初始化成功了,但是就是到设备注册一步卡住了,实在没有头绪了,特来寻求帮助:
LONG NET_DVR_Login_V30(
  char                       *sDVRIP,
  WORD                       wDVRPort,  
  char                       *sUserName,
  char                       *sPassword,
LPNET_DVR_DEVICEINFO_V30   lpDeviceInfo);
红色处是一个结构体,dllcall的话该如何调用呢?

NET_DVR_DEVICEINFO_V30
struct{
  BYTE     sSerialNumber[SERIALNO_LEN];  BYTE     byAlarmInPortNum;
  BYTE     byAlarmOutPortNum;  BYTE     byDiskNum;  BYTE     byDVRType;
  BYTE     byChanNum;  BYTE     byStartChan;  BYTE     byAudioChanNum;
  BYTE     byIPChanNum;  BYTE     byZeroChanNum;  BYTE     byMainProto;
  BYTE     bySubProto;  BYTE     bySupport;  BYTE     bySupport1;
  BYTE     bySupport2;  WORD     wDevType;  BYTE     bySupport3;
  BYTE     byMultiStreamProto;  BYTE     byStartDChan;
  BYTE     byStartDTalkChan;  BYTE     byHighDChanNum;  BYTE     bySupport4;
  BYTE     byLanguageType;  BYTE     byVoiceInChanNum;
  BYTE     byStartVoiceInChanNo;  BYTE     byRes3[2];  BYTE     byMirrorChanNum;
  WORD     wStartMirrorChanNo;  BYTE     byRes2[2];
}NET_DVR_DEVICEINFO_V30,*LPNET_DVR_DEVICEINFO_V30;







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2021-6-11 00:28:59 | 显示全部楼层
DllStructCreate('byte;byte......')创建结构体,DllStructGetPtr传指针
发表于 2021-6-11 15:46:31 | 显示全部楼层
返回了结构体后,用这个函数就可以获取你需要的结构体内的值

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2021-6-11 21:38:37 | 显示全部楼层
本帖最后由 风过无痕 于 2021-6-11 21:44 编辑
Xxkwwz 发表于 2021-6-11 15:46
返回了结构体后,用这个函数就可以获取你需要的结构体内的值

目前就是不知如何返回结构体,很懵。
 楼主| 发表于 2021-6-11 21:46:39 | 显示全部楼层
繁星 发表于 2021-6-11 00:28
DllStructCreate('byte;byte......')创建结构体,DllStructGetPtr传指针

看了好多示例,也尝试用DllStructCreate创建了结构体,但是得到数据总是不对。
发表于 2021-6-25 19:20:47 | 显示全部楼层
本帖最后由 wyl0205 于 2021-6-25 19:23 编辑
 Local  $tagSTRUCT = _
                                        "BYTE  sSerialNumber[48];" & _
                                 "BYTE  byAlarmInPortNum;" & _
                                 "BYTE  byAlarmOutPortNum;" & _
                                 "BYTE  byDiskNum;" & _
                                 "BYTE  byDVRType;" & _
                                "BYTE  byChanNum;" & _
                                 "BYTE  byStartChan;" & _
                                 "BYTE  byAudioChanNum;" & _
                                 "BYTE  byIPChanNum;" & _
                                 "BYTE  byZeroChanNum;" & _
                                 "BYTE  byMainProto;" & _
                                 "BYTE  bySubProto;" & _
                                 "BYTE  bySupport;" & _
                                 "BYTE  bySupport1;" & _
                                 "BYTE  bySupport2;" & _
                                 "WORD  wDevType;" & _
                                 "BYTE  bySupport3;" & _
                                 "BYTE  byMultiStreamProto;" & _
                                 "BYTE  byStartDChan;" & _
                                 "BYTE  byStartDTalkChan;" & _
                                 "BYTE  byHighDChanNum;" & _
                                 "BYTE  bySupport4;" & _
                                 "BYTE  byLanguageType;" & _
                                 "BYTE  byVoiceInChanNum;" & _
                                 "BYTE  byStartVoiceInChanNo;" & _
                                 "BYTE  byRes3[2];" & _
                                 "BYTE  byMirrorChanNum;" & _
                                 "WORD  wStartMirrorChanNo;" & _
                                 "BYTE  byRes2[2];"

        Local $tSTRUCT = DllStructCreate($tagSTRUCT)
DllCall($hDLL, "LONG", 'NET_DVR_Login', "str", '192.168.1.227', 'WORD', "8000", "str", "test", "str", "123456", "struct*", $tSTRUCT)
MsgBox(0, "连接成功", "序列号  " & DllStructGetData($tSTRUCT, 1)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-4 13:40 , Processed in 0.076823 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表