A solução incômoda
As versões do DELPHI tem evoluído com o tempo, acrescentando novos recursos e avanços. A evolução é boa, mas há situações em que o código só funciona com as versões mais recentes.
As funções de API do WINDOWS, por exemplo, tiveram alterações nos tipos dos argumentos. Os tipos dos argumentos mudaram de PCHAR para PWIDECHAR. O que fazer então? Muitos usam a sintaxe abaixo:
{$IFDEF VER220}// Delphi XE
{$DEFINE ARG_PWIDECHAR}
{$ENDIF}
{$IFDEF VER230} // Delphi XE2
{$DEFINE ARG_PWIDECHAR}
{$ENDIF}
A correção funciona, mas tem seus inconvenientes. O fato é que as diretivas VERXXX, que variam conforme a versão do DELPHI, tem que ser verificadas individualmente, como no exemplo acima.
O código fica estranho, parece estar duplicado. Quando a versão mudar para VER240 OU VER250 a verificação deixará de funcionar, exigindo manutenção do código.
A solução elegante
A solução anterior funciona, mas está propensa a falhas, Ao fazer uma pesquisa mais detalhada a respeito destas diretivas, fiquei surpreso ao descobrir um recurso útil para resolver a questão das versões:
{$IF COMPILERVERSION > 21}
{$DEFINE ARG_PWIDECHAR}
{$IFEND}
O par $IF . . . $IFEND tem a mesma função do $IFDEF . . . $ENDIF. A versão do compilador do DELPHI, COMPILERVERSION, é uma constante numérica, o que permite fazer comparações usando os operadores ‘=’, ‘<‘ e ‘ >’.
Com a verificação da versão do compilador, o código acima definirá a condicional ARG_PWIDECHAR. A condicional será usada para indicar o uso de argumentos tipo PWIDECHAR apenas se a versão do DELPHI for superior ao DELPHI 2010. Abaixo a lista de valores com a versão de cada compilador e com o símbolo de diretiva correspondente.
Compilador |
Versão |
Símbolo |
Delphi XE4 |
25 |
VER250 |
Delphi XE3 |
24 |
VER240 |
Delphi XE2 |
23 |
VER230 |
Delphi XE |
22 |
VER220 |
Delphi 2010 |
21 |
VER210 |
Essa é a dica, use o método elegante, mantenha seu código limpo e claro.
Bom código!