Delphi万能指针应用

49 篇文章 0 订阅
15 篇文章 0 订阅

今有一函数:

function TComm.WriteCommData( pDataToWrite: PChar; dwSizeofDataToWrite: Word ): Boolean;

 

也就是PComm控件发送数据用的,现在要把buf:array[0..1024]of byte 中的内容发送出去用:

 

comm.WriteCommData(@buf,Len);Len是要发送的缓冲区长度,要把缓冲区的内容显示出来,有一个十六进制转换为字符串的函数:

//转换成十六进制字符串
Procedure TForm1.Hex2Str(Var Str: String; Hex: PByte; Len: Byte);
Var
  i: Byte;
Begin
  Str := '';
  If Len = 0 Then
    Exit;
  For i := 0 To Len - 1 Do
  Begin
    Try
      Str := Str + IntToHex(Hex^, 2) + ' ';
    Finally
      Inc(Hex);
    End;
  End;
End;

 

则可以调用Hex2Str(tmpStr,@buf);tmpStr是自定义的要保存缓冲区内容的字符串变量,@buf是缓冲区的首地址,现在写一个自定函数:在这个函

 

数中调用WriteCommData,并同时显示出缓冲区的内容,这样可以重用,缓冲区参数还是采用它原来的,这样WriteCommData可以直接调用,可是

 

Hex2Str调用时有一点问题,它的参数是一个动态数组,直接调用Hex2Str(s,pHex,Len)提示参数类型不匹配,仔细看一下Hex2Str的参数类型,实

 

际上是一个指向一个数组首地址,而SendComData的参数pHex是一个指向字符的地址,实际上它们使用的是同一个东西,只不过它们指向的类型

 

不一样,而在Win32 上,指针是一个32位的整型数,哪把它们强制转换为一样的指针类型不就解决了。忽然想起Delphi里有一个万能指针Pointer,

 

用它应该可以的,经测试,OK。

 

procedure TForm1.SendComData(pHex:PAnsiChar; Len: Integer);
var
  s:string;
  p:DWORD;
begin
  p:=DWORD(pHex);
  comm.WriteCommData(pHex,Len);
  Hex2Str(s,Pointer(p),Len);
  memRec.Lines.Add('[S]:'+s);
end;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值