Delphi 2007中的字节数组PAnsiChar

时间:2013-04-09 08:19:49

标签: delphi bytearray

我有一个包含一些数据的字节数组......

CommandBytes : array of byte;

我有一个VCL功能,可以向蓝牙打印机发送命令。 VCL函数原型就是这个

SendData(PAnsiChar, Cardinal);

“此方法将字节从内存缓冲区传输到已打开的设备”

如何才能正确传递字节数组以向打印机发送命令?

我是Delphi的新手,我试过了:

SendData(PAnsiChar(@CommandBytes[0]), SizeOf(CommandBytes));

但它不起作用......

提前致谢。

2 个答案:

答案 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。