喫茶XRAYトップページ


[9987] PChar型とString型の文字列返信 削除
2016/5/23 (月) 15:20:11 Mr.XRAY
こんなの見つけました.

[Delphiで作成のDLLでは非常に大きなStringはPCharで受け渡しできない?]
http://www.freeml.com/delphi-users/4145/latest

処理に応じた文字数が取得できるが,肝心の文字列が空,
ということのようです.
以下のような場合も,似た現象になりますね.
Delphi ML の方は,DLL でない時にテストした時は正常に動作する,
ということですから,これと似たことが原因というわけではありませんが.

ちょっと思いついただけです.

//-------------------------------------------------------------------------
//  文字列の長さは取得できるが,文字列が空(nil)になる状況の例
//-------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  LStr : string;
begin
  Memo1.Lines.Clear;

  LStr := #0 + 'ABC';
  Memo1.Lines.Add('LStr   : ' + LStr);
  Memo1.Lines.Add('Length : ' + IntToStr(Length(LStr)));
end;




[9988] Re:PChar型とString型の文字列返信 削除
2016/5/23 (月) 18:02:44 Mr.XRAY
ちなみに,文字列の先頭や末尾の null 文字 (#0) であれば,
Trim 関数で削除できます.

procedure TForm1.Button2Click(Sender: TObject);
var
  LStr : string;
begin
  Memo1.Lines.Clear;

  LStr := Trim(#0 + 'ABC');
  Memo1.Lines.Add('LStr   : ' + LStr);
  Memo1.Lines.Add('Length : ' + IntToStr(Length(LStr)));
end;


INCM/CMT
Cyclamen v3.82