Delphi recenseur personnalisé donne des erreurs étranges
-
27-10-2019 - |
Question
Lors de la création d'un recenseur personnalisé pour la chaîne que je vois l'analyse syntaxique des messages d'erreur étranges. Lors de l'utilisation de l'enregistrer donne l'erreur suivante:
E2010 types incompatibles: 'TSplitStringEnumerator' et 'pointeur'
Lors de l'utilisation des cours (insérer quelques appels .Create dans le code) au lieu des dossiers que je reçois des erreurs internes de temps en temps:
Quelqu'un sait comment garder le travail de l'énumération des types de données d'enregistrement au lieu de classes?
type
TSplitStringEnumerator = record
StringToParse: string;
Separator: Char;
S: Integer;
E: Integer;
L: Integer;
function GetCurrent (): string; inline;
function MoveNext (): Boolean; inline;
property Current: string read GetCurrent;
end;
TSplitStringGenerator = record
Enum: TSplitStringEnumerator;
function GetEnumerator: TSplitStringEnumerator; inline;
end;
function SplitString( const StringToParse: string; Separator: Char ): TSplitStringGenerator; //inline;
begin
Result.Enum.StringToParse := StringToParse;
Result.Enum.Separator := Separator;
Result.Enum.S := 0;
Result.Enum.E := 0;
Result.Enum.L := Length( StringToParse );
end;
procedure Test();
var
S: string;
begin
for S in SplitString( 'A;B;C', ';' ) do begin
OutputDebugString( PChar( S ) );
end;
end;
{ TSplitStringGenerator }
function TSplitStringGenerator.GetEnumerator(): TSplitStringEnumerator;
begin
Result := Enum;
end;
{ TSplitStringEnumerator }
function TSplitStringEnumerator.GetCurrent(): string;
begin
Result := Copy( StringToParse, S, E - S );
end;
function TSplitStringEnumerator.MoveNext(): Boolean;
begin
S := E + 1;
Result := S <= L;
E := S;
while ( E <= L ) and ( StringToParse[ E ] <> Separator ) do Inc( E );
end;
La solution
J'ai trouvé le rapport similaire bug # 72213 sur QC. Le bug a été corrigé dans Delphi 2010 (voir les commentaires de résolution).
Autres conseils
que le code compile et apparaît pour exécuter avec succès pour moi en Delphi 2010. La sortie est:
Debug Output: A Process Project4.exe (4656)
Debug Output: B Process Project4.exe (4656)
Debug Output: C Process Project4.exe (4656)
Est-il possible que les recenseurs avec les dossiers ne sont pas pris en charge dans Delphi 2007?