1

いくつかのデータを含むバイト配列があります...

CommandBytes : array of byte;

そして、コマンドをBluetoothプリンターに送信するVCLの機能があります。VCL関数のプロトタイプはこれ

SendData(PAnsiChar, Cardinal);

「このメソッドは、メモリ バッファから開いているデバイスにバイトを送信します」

コマンドをプリンターに送信する関数にバイト配列を正しく渡すにはどうすればよいですか?

私はDelphiが初めてで、試しました:

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

しかし、うまくいきません...

前もって感謝します。

4

2 に答える 2

7

SizeOf()動的配列では、ポインターのサイズが得られます。動的配列は、配列の最初の要素へのポインターとして表される参照型です。したがってSizeOf()、ポインターのサイズを返します。そして、それはここでは役に立ちません。

Length()代わりに使用する必要があります:

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

このLength()関数は、配列内の要素の数を返します。

さらに、私はおそらくあなたが にキャストする方法を単純化しますPAnsiChar。次のように、より簡潔に行うことができます。

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

CommandBytesは動的配列への参照であり、配列の最初の要素を指しているため、これは意味があります。

于 2013-04-09T08:27:05.313 に答える
1

はポインタのSizeOf(CommandBytes)サイズを返します。

Length(CommandBytes)配列内の要素数を取得するために使用します。この場合は、SizeOf(byte) = 1 であるため、割り当てられたバッファー サイズです。

于 2013-04-09T08:27:03.270 に答える