ATENÇÃO: as informações apresentadas neste post baseiam-se em observações e testes. Não existe garantia de veracidade ou funcionalidade. Qualquer informação apresentada neste post pode ser alterada pela Progress ou Datasul sem prévio aviso.
Uma das regras para que um r-code seja portável para outros ambientes está relacionada a versão de Progress utilizada para gerar o r-code e recursos utilizados no programa.
Quando um r-code é gerado, o compilador do Progress coloca no cabeçalho (header) do r-code a versão para o qual ele foi compilado. Esta informação de versão é armazenada em um formato de número inteiro de 16 bits, nos bytes 14 e 15.
Abaixo um exemplo de como extrair a versão do r-code, com um programa C#.NET. Este mesmo código pode facilmente ser convertido para qualquer linguagem.
byte[] versionBytes = new byte[2];
FileStream fs = new FileStream(rcodeFile, FileMode.Open, FileAccess.Read);
fs.Seek(14, SeekOrigin.Begin);
fs.Read(versionBytes, 0, 2);
fs.Close();
fs.Dispose();
int rcodeVersion = BitConverter.ToInt16(versionBytes, 0);
A versão contida no r-code varia de acordo com a versão do Progress utilizada para compilação e os recursos de Progress que foram utilizadas no programa.
Considere o código abaixo:
DEF VAR h AS HANDLE.
CREATE CLIENT-PRINCIPAL h.
DELETE OBJECT h.
O r-code gerado a partir deste código apresenta a versão 1005, independente de ter sido compilado com 10.1A, 10.1B ou 10.1C. Como a versão do r-code é a mesma, este programa é portável entre estas três plataformas.
Em contrapartida, o programa abaixo utiliza um recurso novo do 10.1C e não compila em versões anteriores.
DEFINE VARIABLE hStream AS HANDLE NO-UNDO.
DEFINE STREAM myStream.
hStream = STREAM mySTream:HANDLE.
O r-code gerado a partir deste código apresenta a versão 1009, e não executará em versões anteriores.
A tabelinha abaixo apresenta um sumário do número de programas para cada versão de r-code. As informações foram obtidas na expedição da Datasul, no dia 18/09/2008, para o produto EMS 2.06B Multi-idioma Progress 10.1B com SQL Server.
Versão Contagem de programas
------- -----------
1005 45219
1008 459