名前 題名 ▼ Mr.XRAYさん > Windows API の関数の中には名前が同じで,末尾が W と A のものがあること > があります. > 末尾が W の関数は Unicode 版で A は Ansi 版です. > Delphi 2007 以前の非ユニコード版 (Ansi 版) の Delphi で末尾に W も A もない > 関数を使用すると自動的に末尾が A の関数が実行されます. > Delphi 2009 以降のユニード版の Delphi で末尾 W も A もない関数を使用すると > 自動的に末尾が W の関数が実行されます. > > Delphi 2009 以降の Delphi で,引数の型が PChar (PWideChar) に PAnsiChar の > 変数を渡すと, > > 「E2010 'PWideChar' と 'PAnsiChar' には互換性がありません」 > > というエラーになります.その逆も同じです. > 以下はこのことを確認するコードです. > 動作確認は Windows 7 U64(SP1) + Delphi XE5(UP2) Pro VCL-32 です. > > [02-01_使用する Windows API の関数名を決める] > http://mrxray.on.coocan.jp/Delphi/plSamples/480_GetFullExePath.htm#02-01 > > > function HogeHoge(Arg1: PWideChar): Boolean; > begin > Form1.Memo1.Lines.Add(Arg1); > Result := True; > end; > > //============================================================================= > // E2010 'PWideChar' と 'PAnsiChar' には互換性がありません > // のエラーが発生する例 > //============================================================================= > procedure TForm1.Button1Click(Sender: TObject); > var > LPAnsiChar : PAnsiChar; > begin > Form1.Memo1.Lines.Clear; > LPAnsiChar := '日本語 ABC 文字列'; > HogeHoge(LPAnsiChar); > end; > > //============================================================================= > // こういうキャストは無効 > //============================================================================= > procedure TForm1.Button2Click(Sender: TObject); > var > LPAnsiChar : PAnsiChar; > begin > Form1.Memo1.Lines.Clear; > LPAnsiChar := '日本語 ABC 文字列'; > > HogeHoge(PWideChar(LPAnsiChar)); > HogeHoge(PChar(LPAnsiChar)); > end; > > //============================================================================= > // 一度String型でキャストすればPCharでキャスト可能 > // Windows API の関数では実際には末尾が W または A の関数を使用する > //============================================================================= > procedure TForm1.Button3Click(Sender: TObject); > var > LPAnsiChar : PAnsiChar; > begin > Form1.Memo1.Lines.Clear; > LPAnsiChar := '日本語 ABC 文字列'; > > HogeHoge(PWideChar(string(LPAnsiChar))); > end; > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link