Watch, Follow, &
Connect with Us

For forums, blogs and more please visit our
Developer Tools Community.


Welcome, Guest
Guest Settings
Help

Thread: TEdit::KeyPress( Key)にてエラー



Permlink Replies: 4 - Last Post: Oct 3, 2016 1:33 AM Last Post By: 朋則 北山
朋則 北山

Posts: 22
Registered: 8/14/15
TEdit::KeyPress( Key)にてエラー
Click to report abuse...   Click to reply to this thread Reply
  Posted: Oct 2, 2016 11:35 PM
C++Builder6で作成されたアプリケーションのC++Builder10.1への移行作業を
行っています。

以下のコードでエラーが出ています。

void __fastcall TGcoCodeEdit::KeyPress(char &Key)
{
・・・処理
Key = 0;
TEdit::KeyPress( Key); ⇒ここでエラー
}

エラーメッセージ
[bcc32 エラー] GcoCodeEdit.cpp(320): E2357 参照は 'char' で初期化されているが 'wchar_t' 型の左辺値が必要
[bcc32 エラー] GcoCodeEdit.cpp(320): E2342 パラメータ 'Key' は wchar_t & 型として定義されているので char は渡せない


TEdit::KeyPress( Key)にはwchar_tをパラメータとして渡す必要があるというメッセージだと理解しているのですが、
試しに

TEdit::KeyPress(L'0');

とwchar_tを渡してみても、


[bcc32 エラー] GcoCodeEdit.cpp(321): E2357 参照は 'wchar_t' で初期化されているが 'wchar_t' 型の左辺値が必要
[bcc32 エラー] GcoCodeEdit.cpp(321): E2342 パラメータ 'Key' は wchar_t & 型として定義されているので wchar_t は渡せない

というエラーが出ます。

どのようにTEdit::KeyPress( Key)を使えばよいのでしょうか?
Hikaru FUKUSHI

Posts: 65
Registered: 11/11/02
Re: TEdit::KeyPress( Key)にてエラー
Click to report abuse...   Click to reply to this thread Reply
  Posted: Oct 2, 2016 11:54 PM   in response to: 朋則 北山 in response to: 朋則 北山
北山さん、こんにちは。福士です。

以下のコードでエラーが出ています。

void __fastcall TGcoCodeEdit::KeyPress(char &Key)
{
・・・処理
Key = 0;
TEdit::KeyPress( Key); ⇒ここでエラー
}

エラーメッセージ
[bcc32 エラー] GcoCodeEdit.cpp(320): E2357 参照は 'char' で初期化されているが 'wchar_t' 型の左辺値が必要
[bcc32 エラー] GcoCodeEdit.cpp(320): E2342 パラメータ 'Key' は wchar_t & 型として定義されているので char は渡せない
----------------------------------------------------------------------------------------------------------------

Delphi/C++Builder 2009以降、デフォルトの文字の型がcharからwchar_tに変更になっています。

Delphi 2009 および C++Builder 2009 の新機能 - RAD Studio
http://docwiki.embarcadero.com/RADStudio/XE/ja/Delphi_2009_%E3%81%8A%E3%82%88%E3%81%B3_C%2B%2BBuilder_2009_%E3%81%AE%E6%96%B0%E6%A9%9F%E8%83%BD#.E6.9C.AC.E8.A3.BD.E5.93.81.E3.81.A7.E3.81.AE_Unicode_.E3.81.AE.E5.85.A8.E9.9D.A2.E7.9A.84.E6.8E.A1.E7.94.A8

ですのでこの場合

void __fastcall TGcoCodeEdit::KeyPress(wchar_t &Key)


となっている必要があります。

--
東洋テクニカルシステム株式会社 システム開発部 福士 光
Hikaru Fukushi (Toyo Technical System Inc.)
mailto:fukushi@tts-inc.co.jp

Edited by: Hikaru FUKUSHI on Oct 3, 2016 3:54 PM
朋則 北山

Posts: 22
Registered: 8/14/15
Re: TEdit::KeyPress( Key)にてエラー
Click to report abuse...   Click to reply to this thread Reply
  Posted: Oct 3, 2016 12:36 AM   in response to: 朋則 北山 in response to: 朋則 北山
ご回答ありがとうございました。
コンパイルエラーが取れました。

因みに、下記URLでは

http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/delphivclwin32/Controls_TWinControl_KeyPress.html

__fastcall KeyPress(Char Key);

と定義されているのですが、
こちらは

__fastcall KeyPress(wchar_t Key);

になったということでしょうか?
Hikaru FUKUSHI

Posts: 65
Registered: 11/11/02
Re: TEdit::KeyPress( Key)にてエラー
Click to report abuse...   Click to reply to this thread Reply
  Posted: Oct 3, 2016 1:29 AM   in response to: 朋則 北山 in response to: 朋則 北山
北山さん、こんばんは。福士です。

因みに、下記URLでは

http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/delphivclwin32/Controls_TWinControl_KeyPress.html

__fastcall KeyPress(Char Key);

と定義されているのですが、
こちらは

__fastcall KeyPress(wchar_t Key);

になったということでしょうか?

対応するヘルプ

Vcl.Controls.TWinControl.KeyPress - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Berlin/ja/Vcl.Controls.TWinControl.KeyPress

によるとプロトタイプは正確には

DYNAMIC void __fastcall KeyPress(System::WideChar &Key);


ですね。

--
東洋テクニカルシステム株式会社 システム開発部 福士 光
Hikaru Fukushi (Toyo Technical System Inc.)
mailto:fukushi@tts-inc.co.jp
朋則 北山

Posts: 22
Registered: 8/14/15
Re: TEdit::KeyPress( Key)にてエラー
Click to report abuse...   Click to reply to this thread Reply
  Posted: Oct 3, 2016 1:33 AM   in response to: 朋則 北山 in response to: 朋則 北山
ご回答ありがとうございました。
Legend
Helpful Answer (5 pts)
Correct Answer (10 pts)

Server Response from: ETNAJIVE02