Delphi Unicode – entendo os avisos (warning) do compilar sua aplicação

Salve, salve amigos,

A partir do Delphi 2009 foi implementado o suporte a Unicode em todo o Delphi, caso você não esteja familiarizado com Unicode leia este post. Ao compilar sua aplicação alguns avisos (warning) serão emitidos pelo compilador, neste post vou esclarecer estas mensagens e o que você deve fazer para que elas não apareçam mais.

O código abaixo até versões do Delphi 2007, compilado em versões igual ou superiores ao Delphi 2009, receberá esta mensagem ao compilar:

W1050 WideChar reduced to byte char in set expressions. Consider using ‘CharInSet’ function in ‘SysUtils’ unit
view source
print?
var
Status : Char;
begin

if Status in [ ‘a’, ‘s’, ‘c’] then
begin

end;

Para evitar este warning, você deverá passar a usar a função CharInSet.
view source
print?
var
Status : Char;
begin

if CharInSet(Status, [‘a’, ‘s’, ‘c’]) then
begin

end;

O código abaixo irá gerar a mensagem W1057 Implicit string cast from ‘ShortString’ to ’string’
view source
print?
var
s : ShortString;
u : string;
begin
u := s;
end;

Para eliminar este mensagem basta fazer um cast da varíavel ShortString para String, este código será compatível com versões anteriores ao Delphi 2009.
view source
print?
var
s : ShortString;
u : string;
begin
u := String(s);
end;

A mesma situação se aplica para variáveis AnsiString gerando a mensagem W1057 Implicit string cast from ‘AnsiString’ to ’string’
view source
print?
var
a : AnsitString;
u : string;
begin
u := s;
end;

Basta fazer um cast da variável AnsiString para String e a mensagem será eliminada.
view source
print?
var
a : AnsitString;
u : string;
begin
u := AnsiString(s);
end;

A mensagem W1058 Implicit string cast with potential data loss from ’string’ to ‘AnsiString’ precisa ser analizada com cuidado, podemos fazer o cast e resolver o problema, mas você precisa saber o que está fazendo.
view source
print?
var
a : AnsitString;
u : string;
begin
u := s;
end;

Se você tem certeza que a variável a contém apenas caracteres Ansi, poderá fazer o cast sem problemas.
view source
print?
var
a : AnsitString;
u : string;
begin
u := AnsiString(s);
end;

Até aqui vimos as mensagens geradas pelo compilador, Unicode vai muito mais além e se você quiser exportar sua aplicação para países asiáticos por exemplo, terá que suportar Unicode, existem 3 artifos no EDN que eu recomendo a leitura, são eles:

(Por Andreano Lanusse)

Anúncios

2 respostas em “Delphi Unicode – entendo os avisos (warning) do compilar sua aplicação

  1. Bom dia,Quando tenho uma dll em Delphi que recebe tres parametros shortstring e retorna um shortstring que esta nesse formato de caracteres,você saberia dizer como faria para converter?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s