VC SDK二次开发 转换Delphi

haj77 2017-11-09 01:25:35
VC代码转换Delphi


VC定义:
// 开启道闸参数(对应DH_CTRL_OPEN_STROBE命令)
typedef struct tagNET_CTRL_OPEN_STROBE
{
DWORD dwSize;
int nChannelId; // 通道号
char szPlateNumber[MAX_PLATENUMBER_LEN]; // 车牌号码
} NET_CTRL_OPEN_STROBE;

// 设备控制函数原型
CLIENT_API BOOL CALL_METHOD CLIENT_ControlDevice(LLONG lLoginID, CtrlType type, void *param, int waittime = 1000);

VC代码:
NET_CTRL_OPEN_STROBE stuAccessPara = { sizeof(stuAccessPara) };
stuAccessPara.nChannelId = thisVideo.index;
bool bret = CLIENT_ControlDevice(thisVideo.LoginID, DH_CTRL_OPEN_STROBE, &stuAccessPara);

Delphi定义:
type
LPNET_CTRL_OPEN_STROBE = ^NET_CTRL_OPEN_STROBE ;
NET_CTRL_OPEN_STROBE = record
dwSize : DWORD;
nChannelId : Integer;
szPlateNumber : Array [0..40-1] of Char;
end;

// 设备控制
Function CLIENT_ControlDevice( lLoginID : LongInt;CtrlType :tCtrlType ; param :Pointer; const waittime :integer= 1000): Boolean; stdcall External 'dhnetsdk';

var
aa :LPNET_CTRL_OPEN_STROBE;
Rest :Boolean;
begin
AA:= New(LPNET_CTRL_OPEN_STROBE);
aa.dwSize :=sizeof(NET_CTRL_OPEN_STROBE);
aa.nChannelId :=0;
//aa.szPlateNumber :='ABCD';
Rest :=CLIENT_ControlDevice(devHandle,DH_CTRL_OPEN_STROBE,AA);
if Rest then
Memo1.Lines.Add('开闸成功')
else
Memo1.Lines.Add('开闸失败')
end;

CLIENT_ControlDevice函数不报错,但是也不返回正确结果
...全文
241 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
可能出问题的基本就这么几种,数据类型、调用约定、结构对齐...
haj77 2017-11-09
  • 打赏
  • 举报
回复
LLONG lLoginID 这个定义成lLoginID : LongInt 没有问题
  • 打赏
  • 举报
回复
LLONG的定义是啥,也许是long long?

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧