|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2019/3/10 12:12:53 |
标题: |
请高手帮忙转成delphi的函数,谢谢! |
浏览:1238 |
|
加入我的收藏 |
楼主: |
有个函数,请帮忙转成delphi,能成功调用并返回结果的,请mail我电话号码,30元话费酬谢!308612882@qq.com
__int16 __stdcall IC_Pro_Commandlink(HANDLE idComDev,unsigned int slen, unsigned char * sendbuffer,unsigned int *rlen, unsigned char * databuffer,unsigned char timeout, unsigned char FG); 说明:应用协议数据单元信息交换函数。该函数已封装T=CL操作
调用:HANDLE idComDev----IC_InitComm函数返回的端口标识符 unsigned int slen ---- 发送的信息长度 unsigned char * sendbuffer ---- 存放要发送的信息 unsigned int *rlen ---- 返回信息的长度 unsigned char * databuffer ---- 存放返回的信息 unsigned char timeout---- 延迟时间,单位为:10ms unsigned char FG---- 分割长度。建议此值小于64 返回: <0 错误。其绝对值为错误号 =0 成功。
举例: unsigned int slen =5; unsigned char sendbuffer[100]="\0" ; memcpy(sendbuffer,"\x00\x84\x00\x00\x08",5); unsigned int rlen ; unsigned char databuffer[100]="\0"; st=IC_Pro_Commandlink(idComDev,slen,sendbuff,&rlen,databuffer,6,48); if(st!=0) { AfxMessageBox("发送指令失败"); return; } if(st!=0) { AfxMessageBox("发送指令失败"); return; }
----------------------------------------------
- |
作者: |
|
2019/3/10 12:31:12 |
1楼: |
type PCardinal = ^Cardinal; function IC_Pro_Commandlink(idComDev: THANDLE; slen: Cardinal; sendbuffer: PByte; rlen: PCardinal; databuffer: PByte; timeout: Byte; FG: Byte): SmallInt; stdcall;
----------------------------------------------
-
|
作者: |
|
2019/3/10 12:38:37 |
2楼: |
按你的调用方法,应该改为 function IC_Pro_Commandlink(idComDev: THANDLE; slen: Cardinal; sendbuffer: PByte; var rlen: Cardinal; databuffer: PByte; timeout: Byte; FG: Byte): SmallInt; stdcall;
----------------------------------------------
-
|
作者: |
|
2019/3/10 12:42:30 |
3楼: |
第一种方法,对应的调用方式为: st := IC_Pro_Commandlink(idComDev,slen,sendbuff,@rlen,databuffer,6,48); 第二种方法,对应的调用方式为: st := IC_Pro_Commandlink(idComDev,slen,sendbuff, rlen,databuffer,6,48);
----------------------------------------------
-
|
作者: |
|
2019/3/10 19:15:51 |
4楼: |
谢谢bluestorm!下午出去了,刚刚试了下可以运行,但是databuffer没有返回数据, unsigned int slen =5; unsigned char sendbuffer[100]="\0" ; memcpy(sendbuffer,"\x00\x84\x00\x00\x08",5); unsigned int rlen ; unsigned char databuffer[100]="\0"; 实例中这几句转换成delphi应该怎么写呢?
把电话号码发邮箱给我,给你充话费。
----------------------------------------------
-
|
作者: |
|
2019/3/11 9:09:23 |
5楼: |
你的话费免了。 var slen, rLen: Cardinal; sendBuffer, databuffer: array[0..99] of Byte; begin zeromemory(@sendbuffer, 100); zeromemory(@databuffer, 100); HexToBin('0084000008', sendbuffer, 5); end;
----------------------------------------------
-
|
作者: |
|
2019/3/12 13:35:14 |
6楼: |
非常感谢,因为一直没调用成功所以没回复。多次测试后发现是别的原因。给的代码能正常调用并返回数据。
----------------------------------------------
-
|
|