喫茶XRAYトップページ

[スレッド全体
]

[12045] Re:Move関数の引数返信 削除
2018/7/13 (金) 11:23:57 Mr.XRAY
> したがって,変数名を使用する必要があります.

そうしないと

E2197 変数パラメータに定数オブジェクトを渡すことはできません

というエラーが発生します.以下のコードで実際の現象を確認できます.
簡単なコードです.実際にコーディングして確かめてみることをお勧めします.
記事をみて納得するだけでなく,実際に経験することには大きな意味があります.
「百閧ヘ一見にしかず.百見は一触にしかず」です.


procedure HogeHoge(var Arg1: string);
begin
  ShowMessage(Arg1);
  Arg1 := '日本語';
end;

//=============================================================================
//  E2197 変数パラメータに定数オブジェクトを渡すことはできません
//  のエラーが発生するコード
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  HogeHoge('XYZ');
end;
//=============================================================================
//  E2197 変数パラメータに定数オブジェクトを渡すことはできません
//  のエラーが発生しないコード
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
 LText : string;
begin
  LText := 'XYZ';
  HogeHoge(LText);
  ShowMessage(LText);
end;


[12049] 関数の引数には変数を使用する返信 削除
2018/7/14 (土) 06:49:42 Mr.XRAY
> E2197 変数パラメータに定数オブジェクトを渡すことはできません

StrPCopy や Move 関数は「変数」が指す (アドレスの) メモリ上のデータを
コピーします.したがって,引数には「変数」を使用します.
一般に関数の引数には変数を使用します.
具体的な文字列を渡して,エラーが発生しなくても期待通りの動作とならない
ことがあります.

特に今回の場合,AnsiString あるいは PAnsiChar, AnsiChar であることを
明確にしなければならないのですから尚更です.
具体的な文字列を直接引数に使用できるのは特別な場合と思ってください.


# 最初のレスで終わると思ったのですが (^^;
# う〜む,想定外 ?

# 提示したコードを実際に動作させてみることをお勧めします.
# 見て理解するのと,実際に体験するのとでは脳への記録のされ方が違います.
# どれもフォームに TButton と TMome だけを配置した簡単なプロジェクトです.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82