segunda-feira, 25 de janeiro de 2010
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)
Assinar:
Postar comentários (Atom)
2 comentários:
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?
em c#
Postar um comentário