Esse artigo faz parte da revista Clube Delphi edição 11. Clique aqui para ler todos os artigos desta edição



Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.

API’s em desuso e versões do Delphi

 

Quanto mais estudo o Universo das funções APIs, percebo claramente que o emprego da palavra Universo não se trata de uma metáfora. Quando terminei meu livro, fiquei com uma sensação de obra incompleta. O fato é que um livro reunindo todas as APIs seria uma obra concorrente da Bíblia em número de páginas. E, provavelmente, não teria sucesso absoluto, pois existem milhares de APIs não documentadas, que não conseguiria ter ciência.

         Algumas funções APIs do Win16 não existem mais no Win32, outras são consideradas obsoletas e continuam compiláveis apenas por questões de compatibilidade. Existem funções APIs que mudaram os tipos de parâmetros ou de resultado. E onde está  a documentação??? Temos apenas a ajuda on line do API Win32, onde um conteúdo específico não está centralizado. Em uma rápida pesquisa, encontrei as funções listadas abaixo:

 

Função do Win16             Substituta para o Win32

OpenComm                      CreateFile

CloseComm                      CloseHandle

FlashComm                      PurgeComm

GetCommError                  ClearCommError

ReadComm                      ReadFile

WriteComm                      WriteFile

DlgDirSelect                      DlgDirSelectEx

GetBitmapDimension GetBitmapDimensionEx

SetBitmapDimension SetBitmapDimensionEx

 

         Talvez esta lista não corresponda a 10% da realidade. Existem ainda as que não possuem correspondência, ou seja, não há função similar substituta no Win32:

 

Funções APIs da Win16 em desuso:    

FreeSelector                     AllocSelector

UnGetCommChar               ChangeSelector

GetCodeInfo                     GlobalDOSAlloc

GlobalDOSFree                  ValidateCodeSegments

ValidateFreeSegments        GetModuleUsage

AccessResource                AllocResource

SetResourceHandler           GetCodeHandle

LockData                         UnlockData

GlobalNotify                      DefineHandleTable

MakeProcInstance              FreeProcInstance

 

         Não são apenas estas. Mas já é o suficiente para que você pesquise se uma incompatibilidade de compilação ou funcionamento é derivada deste fato.     Aproveitando, existem também maneiras de escrever linhas de código compatíveis com diferentes versões do Delphi:

 

{$IFDEF WINDOWS}

// Coloque aqui se código para Windows 3.x

{$ENDIF}

 

{$IFDEF WIN32}

// Coloque aqui seu código para Windows 9x e NT

{$ENDIF}

 

E para diferentes versões do Delphi, seguimos o mesmo príncipio:

 

{$IFDEF VER80}

// Código do Delphi 1

{$ENDIF}

 

{$IFDEF VER90}

// Código do Delphi 2

{$ENDIF}

 

{$IFDEF VER100}

// Código do Delphi 3

{$ENDIF}

 

{$IFDEF VER120}

// Código para Delphi 4

{$ENDIF}

 

{$IFDEF VER130}

// Código para Delphi 5

{$ENDIF}

 

Simples quando se conhece, não acham? Um comentário interessante: percebam que o Delphi 1 é a versão 8.0 do Turbo Pascal, comprovado em seu parâmetro para compilação :)