Null(#0)を含んだ文字の読込


電解コンデンサ  2005-08-30 19:49:04  No: 17324  IP: 192.*.*.*

Dllのメソッドを使うのに悩んでいます。

Read命令があるんですが、データを読み込むために、バッファへのポインタ引数と読み込むデータサイズ指定の引数があります。
その引数よりPCharを用いてデータを取るのはいいと思うのですが、読み込んだデータの中にNull文字が入っていたら、データサイズによらずそこでデータが切れてしまうと思うのです。
これをNull文字によらず、データサイズ分、きちんとデータが読み込める方法があるでしょうか?

乱文でもうしわけないです…

編集 削除
たかみちえ  URL  2005-08-30 20:54:36  No: 17325  IP: 192.*.*.*

"しまうと思うのです。"と言うことは、実際には試されていないのですか?
でしたら、まずは試してみることをお勧めします。Nullを含んだ文字の読み取りですが、わたしはさほど苦労した記憶はありません。

編集 削除
ですね。  2005-08-30 21:02:26  No: 17326  IP: 192.*.*.*

procedure TForm1.Button1Click(Sender: TObject);
var
  A: PChar;
  str:string;
  i:integer;
begin
  A:=PChar('ABC'+#0+'DEF');
  str:='';
  for i:=0 to 6 do
    if A[i]<>#0 then
      str:=str+Char(A[i]);
  caption:=str;
end;

編集 削除
anone  2005-08-30 21:33:19  No: 17327  IP: 192.*.*.*

> データを読み込むために、バッファへのポインタ引数と読み込むデータサイズ指定の引数があります。

適切にバッファを設定すると、#0 で string 型が途切れることはありません。
PChar で受け取ったら、適当にキャストなぞしないでちゃんと SetString() を
使って string 型に変換すると途切れることはありません。

編集 削除