2013-04-09 75 views
1

我有一些數據的字節數組...字節數組PAnsiChar在2007年德爾福

CommandBytes : array of byte; 

和我有一個VCL的函數發送命令到藍牙打印機。 的VCL函數原型是本

SendData(PAnsiChar, Cardinal); 

「這種方法從存儲器緩衝器發送字節到打開裝置」

如何可以傳遞正確的字節數組函數發送命令到打印機?

我是新來的Delphi,我想:

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

,但它不提前工作...

感謝。

+1

'SendData'函數看起來很奇怪的設計。與C和C++不同,Pascal對字節和字符有不同的類型。所以我通常期望'PAnsiChar'是一個空終止的指針。並且指向要聲明爲「PByte」的字節數組的指針。 SendData是由第三方定義的嗎?在這種情況下,我想你必須適應它。但如果它是你的功能,那麼我會把它改成'PByte'。 – 2013-04-09 09:08:07

+0

對不起,我不知道...我只接受你的答案。 – user2075861 2013-04-15 14:46:04

回答

7

SizeOf()產生一個指針的大小。動態數組是一種引用類型,表示爲指向數組的第一個元素的指針。因此SizeOf()返回指針的大小。這對你來說毫無用處。

您需要使用Length()代替:

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

Length()函數返回數組中元素的個數。

更重要的是,我可能會簡化您投射到PAnsiChar的方式。你可以這樣做更簡明這樣的:

SendData(PAnsiChar(CommandBytes), Length(CommandBytes)); 

這是有意義的,因爲CommandBytes,是一個動態數組的引用,指向數組的第一個元素。

1

SizeOf(CommandBytes)將返回一個指針的大小。

使用Length(CommandBytes)得到陣列,在這種情況下是分配的緩衝區大小的元素計數,因爲一下SizeOf動態陣列上(字節)= 1

+1

'Length'返回元素數而不是大小。如果因爲SizeOf(元素)是1而碰巧在這裏是相同的東西。 – 2013-04-09 08:32:39

+0

感謝大家! – user2075861 2013-04-10 15:32:50