喫茶XRAYトップページ


[6730] 文字要素と文字列返信 削除
2013/2/23 (土) 12:26:50 Mr.XRAY
こんなページ,記事を見つけました.
http://drang.s4.xrea.com/program/tips/memo/char.html

>どうやらChar型の文字をPCharでキャストするのはNGなようで

ということです.
Char というのは,1文字の要素です.

array[0..10] of Char;

とかで使います.一方,String型は,
[Delphi 2009 と 文字列型]
http://edn.embarcadero.com/jp/article/38791

のように,まさに,文字列型として定義されています.
つまり,String型というのは,文字列としての情報も格納されています.
Charは「文字列」ではありません.

ShellExecuteの第4引数に与えるのは,Null終端の「文字列」です.
「文字(要素)」ではありません.
PChar(文字列) とすると,「文字列」をNull終端文字列にしてくれます.
素直にString型をPCharでキャストして渡すのがいいですね.
もちろん,いろいろな疑問に挑戦することは必要なことだと思います.

ちなみに,'A'のようにして渡した場合,Delphiでは,
これを「文字」(Char)ではなく「文字列」(String)として解釈してくれます.


[6731] Delphi2009以降とそれより前の返信 削除
2013/2/23 (土) 16:18:55 Mr.XRAY
Char と PChar で思い出したのですが,
Delphi 2007 以前のコード,コンポーネン類もですが,
これを Delphi 2009 以降対応にするのは,Unicode 対応にするとか
しないとかを別にしても,結構大変です.

ところが,逆に Delphi 2009以降のコードを Delphi 2007 以前で
使用可能にするのは,以外とスムーズにいくようです.

これは,Delphi 2009 以降では,それまであいまいだった PChar,Char の
使い方が明確になったせいもあると思います.
しかし,新しいバージョンで実装された機能,関数等ですが,
これらを使用してしまうと,Delphi 2007 以前で使用可能にするのは面倒です.

[アプリケーションを Unicode 対応にする]
http://docwiki.embarcadero.com/RADStudio/XE3/ja/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92_Unicode_%E5%AF%BE%E5%BF%9C%E3%81%AB%E3%81%99%E3%82%8B

INCM/CMT
Cyclamen v3.82