Delphi 2006 プログラムは、ANSI バージョンの ShellExecute、つまり ShellExecuteA を呼び出しています。ANSI パラメータを受け取ります。
これらの引数は、Delphi XE2 プログラムに到着すると、GetCommandLine を介して取得されます。XE2 プログラムは、Unicode バージョンの GetCommandLineW を呼び出します。
しかし、バックグラウンドで Windows が ANSI から Unicode に変換しています。
この種のコンテキスト依存の変換は、Windows で常に発生します。たとえば、WM_SETTEXT に対して SendMessageA を呼び出し、PAnsiChar を渡します。ただし、ウィンドウは Unicode ウィンドウであるため、PWideChar を受け取ります。システムはこうでなければなりません。それ以外は無政府状態になります。
問題の原因は、一方のプログラムが ANSI を使用し、もう一方のプログラムが Unicode を使用していることではありません。あなたの問題は他の場所にあります。
正確には、この情報ではわかりません。明らかな可能性の 1 つは、引数にスペースが含まれていることです。これらのスペースは、受信者である XE2 プログラムによって引数区切り文字として解釈されます。引数を引用符で囲みます。このような:
ShellExecute(..., '"argument with spaces"', ...);
別の可能性としては、引数を受け取ったときに引数を PAnsiChar にキャストしている可能性があります。もしそうなら、しないでください。Unicode 文字列である ParamStr(1) を読むだけです。Windows によって ANSI から変換されます。
ここで最後に明らかに少し推測していますが、率直に言って、障害を決定的に診断するのに十分な情報はありません. しかし、あなたのシナリオでは、ANSI テキストが透過的に Unicode に変換されることは確かです。