我有一个包含一些数据的字节数组......
CommandBytes : array of byte;
我有一个VCL功能,可以向蓝牙打印机发送命令。 VCL函数原型就是这个
SendData(PAnsiChar, Cardinal);
“此方法将字节从内存缓冲区传输到已打开的设备”
如何才能正确传递字节数组以向打印机发送命令?
我是Delphi的新手,我试过了:
SendData(PAnsiChar(@CommandBytes[0]), SizeOf(CommandBytes));
但它不起作用......
提前致谢。
答案 0 :(得分:7)
SizeOf()
产生指针的大小。动态数组是一种引用类型,表示为指向数组第一个元素的指针。因此SizeOf()
返回指针的大小。这对你没用。
您需要使用Length()
代替:
SendData(PAnsiChar(@CommandBytes[0]), Length(CommandBytes));
Length()
函数返回数组中元素的数量。
更重要的是,我可能会简化你投射到PAnsiChar
的方式。你可以这样简洁地做到这一点:
SendData(PAnsiChar(CommandBytes), Length(CommandBytes));
这是有意义的,因为作为动态数组的引用的CommandBytes
指向数组的第一个元素。
答案 1 :(得分:1)
SizeOf(CommandBytes)
将返回指针的大小。
使用Length(CommandBytes)
获取数组中的元素计数,在本例中为分配的缓冲区大小,因为SizeOf(byte)= 1。