1

私はコードを持っています

procedure _UUEncode;
var
  Sg: string;
  Triple: string[3];
begin
  ...
  Byte(Sg[1]) := Byte(Sg[1]) + Length(Triple); // <- on this line I got error
  ...
end;

「左記号を割り当てることができません」というエラーが表示されました。誰か助けてもらえますか? Delphi 7 コンポーネントから XE2 コンポーネントに変換しようとしています

提案をありがとう、私は本当に感謝しています、誰かがdelphi7 vclコンポーネントをxe2に変換する際に注意しなければならないチェックリストを持っているかもしれません

4

1 に答える 1

2

Delphi のすべてのバージョンで、次のように記述します。

inc(Sg[1], Length(Triple));

可能であれば、キャストを避けることは常に価値があります。この場合、序数の値を増やしたいと思ってincいます。

タイプキャストが失敗した理由は、割り当てのターゲットでのキャストが特別であるためです。これらの型キャストは変数型キャストと呼ばれ、ドキュメントには次のように記載されています。

サイズが同じで、整数と実数を混在させない限り、任意の変数を任意の型にキャストできます。

あなたの場合、失敗はサイズが一致しないためです。これCharは、Unicode Delphi では幅が 2 バイトであるためです。したがって、元のコードの最も文字通りの変換は次のとおりです。

Word(Sg[1]) := Word(Sg[1]) + Length(Triple);

ただし、 を使用する方が優れており、明確incです。

AnsiStringuuencode はバイナリ データを ASCII のサブセットにマップするため、uuencode 関数を使用する必要があることも考えられます。に切り替えたAnsiString場合、元のコードは変更されずに機能します。そうは言っても、私はまだincより明確だと思います!

于 2013-02-27T09:42:16.763 に答える