일부 코드를 D2007에서 DXE2로 이식하려고합니다. 이 간단한 코드는 D2007에서 잘 컴파일됩니다. DXE2에서이 오류가 표시됩니다.유니 코드와 함께 사용하는 방법?
[DCC Warning] Unit1.pas(10): W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.
[DCC Error] Unit1.pas(37): E2010 Incompatible types: 'AnsiChar' and 'Char'
아마도 유니 코드 문제입니다. 누군가가 왜 이런 일이 일어나고 어떻게 해결해야하는지 말해 줄 수 있습니까?
감사
코드 :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TSetOfChar = Set of Char; // Line 10
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FCharacterSet: TSetOfChar;
public
property CharacterSet: TSetOfChar read FCharacterSet write FCharacterSet;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
CharacterSet: TSetOfChar;
j: Integer;
s: String;
begin
CharacterSet := [];
s := 'I''m just testing åäö';
for j := 1 to Length(s) do
Include(CharacterSet, s[j]); // <- Line 37
end;
end.
편집 : 나는 아무 제네릭이없는 델파이 2007을 사용하고 참고. 유니 코드로 포팅하는 코드가 많아서 D2007에서 여전히 작동하는 코드를 원합니다. 이것은 느린 과정입니다. 모든 것이 이식되면 XE2에서 작동하는지 확인한 다음 generics와 같은 XE2를 사용할 수 있습니다. 그 동안 우리는 평소와 같이 D2007을 유지 관리하고 있으므로 개정 관리 시스템에서 XE2 분기를 피하기를 원합니다.
사전 형식은 델파이 집합 유형의 "집합 x 일 경우"연산에 필적하는 런타임 속도를 제공 할 수 있다고 생각합니다. 대신 사전을 사용하는 것이 좋습니다. Include는 "사전의 일부가 아닌 경우에는이 키 추가"작업을 사전에 Widechar 키와 함께 사용합니다. –