const
MAX_CALIBRES = 16;
MAX_COLORES = 8;
MAX_FORMAS = 4;
MAX_DENSIDADES = 4;
MAX_DEFECTOS = 4;
type
tagDatosFrutas = packed record
nDatosPeso, nDatosFrutas: integer;
end;
DatosPartida: array[0..MAX_CALIBRES, 0..MAX_COLORS,
0..MAX_FORMAS - 1, 0..MAX_DENSIDADES - 1,
0..MAX_DEFECTOS - 1] of tagDatosFatura;
procedure DescomprimeDatos(pStream: TBlobStream; DatosPartidaP: Pointer);
var
pDatoActual: Pointer;
i, j, nDato, nNumRepeticiones: integer;
begin
try
pDatoActual := DatosPartidaP;
try
for i := 0 to pStream.Size div (SizeOf(integer) shl 1) - 1 do
begin
pStream.Read(nNumRepeticiones, SizeOf(integer));
pStream.Read(nDato, SizeOf(integer));
for j := 0 to nNumRepeticiones - 1 do
begin
pDatoActual := nDato;
pDatoActual := pDatoActual + SizeOf(integer);
end;
end;
except
raise;
end;
finally
pStream.Free;
end;
end;
// Chamada em Delphi (convertida do C++Builder)
pStream :=
TBlobStream(ExportarDB.PartidasQ.CreateBlobStream(ExportarDB.PartidasQ.Field
ByName('Datos'), bmRead));
DescomprimeDatos(pStream, @DatosPartida);
// DATOS DE LA PARTIDA ** si la máquina es de solo peso
// Datos de la partida 10 pesos
for Calibre := 1 to 10 do
begin
Peso := DatosPartida[Calibre, 0, 0, 0, 0].nDatosPeso;
Frutas = DatosPartida[Calibre, 0, 0, 0, 0].nDatosFrutas;
end;
// Destrio -> en caso de que la máquina tenga
Peso := DatosPartida[0, 0, 0, 0, 0].nDatosPeso;
AS := AS + strAux;
Sds.
De: [email protected] [mailto:[email protected]] Em
nome de Walter Chagas (Bol)
Enviada em: sexta-feira, 30 de julho de 2010 08:25
Para: [email protected]
Assunto: Re: [delphi-br] Ferramenta para transcrever codigo C++ Builder para
Delphi
Eu precisei uma vez, na faculdade, de ferramentas pra portar código pascal
para C++. Achei muitas que faziam o contrario (algumas eram a própria
pagina) mas infelizmente não salvei as URLs senão até te passaria.
Os dois códigos são portáveis, basta voce saber o que um significa no outro.
O Struts, por exemplo, corresponde ao Record no Pascal. Variável com
asterisco na frente é um ponteiro, a seta (->) voce substitui pelo ponto e o
catch é o Exception no pascal
Mas dá uma olhada na web que vc deve achar tais ferramentas. Mas só
lembrando que as que vi convertiam apenas algorítmos e não forms e recursos
visuais.
[]s
Walter Alves Chagas Junior
Belo Horizonte - MG - Brazil
[email protected] <mailto:wchagasj%40bol.com.br>
http://delphitocorporerm.blogspot.com/
MSN: [email protected] <mailto:whitesockets%40hotmail.com>
SKYPE: WalterChagasJr
----- Original Message -----
From: <[email protected] <mailto:thevortex78%40yahoo.com.br> >
To: <[email protected] <mailto:delphi-br%40yahoogrupos.com.br> >
Sent: Friday, July 30, 2010 7:31 AM
Subject: [delphi-br] Ferramenta para transcrever codigo C++ Builder para
Delphi
Bom dia pessoal, tenho um cliente que tem uma maquina de classificação de
frutas e esta maquina possui um sistema que foi desenvolvido em C++ Builder
e armazena dados no MySQL, acontece que tem um campo onde o programador
armazena uma array muiltidimensional em um campo BLOB (vai saber La por que,
como eu disse o cara é programador de C++ Builder), descobri esse campo
quando fomo tentar importar os registros de classificação para o banco de
dados do ERP da empresa, entrei em contato com o programador dizendo como
poderia "facilmente" recuperar esses dados e ele me enviou esse código:
#define MAX_CALIBRES 16
#define MAX_COLORES 8
#define MAX_FORMAS 4
#define MAX_DENSIDADES 4
#define MAX_DEFECTOS 4
//----------------------------------------------------------
struct tagDatosFrutas {
int nDatosPeso;
int nDatosFrutas;
};
struct tagDatosFrutas DatosPartida [MAX_CALIBRES+1]
[MAX_COLORES+1]
[MAX_FORMAS]
[MAX_DENSIDADES]
[MAX_DEFECTOS];
//----------------------------------------------------------
void __fastcall DescomprimeDatos(TBlobStream *pStream, int* DatosPartidaP)
{
int *pDatoActual;
int nDato, nNumRepeticiones;
int i, j;
pDatoActual = DatosPartidaP;
try {
// Se divide por dos porque hago 2 lecturas en cada iteracion
for (i=0; i<(int)(pStream->Size/(sizeof(int)*2)); i++) {
pStream->Read (&nNumRepeticiones, sizeof (int));
pStream->Read (&nDato, sizeof (int));
for (j=0; j<nNumRepeticiones; j++) {
*pDatoActual = nDato;
pDatoActual++;
}
}
}
catch (...) {
throw;
}
delete pStream;
}
//----------------------------------------------------------
** Tratamiento de la información de la partida después de seleccionarla
//----------------------------------------------------------
(Código para c++ builder)
pStream = (TBlobStream *)ExportarDB->PartidasQ->
CreateBlobStream(ExportarDB->PartidasQ->
FieldByName("Datos"), bmRead);
DescomprimeDatos( pStream, (int *)DatosPartida);
//DATOS DE LA PARTIDA ** si la máquina es de solo peso
// Datos de la partida 10 pesos
for (Calibre = 1; Calibre < 11; Calibre++)
{
Peso = DatosPartida[Calibre][0][0][0][0].nDatosPeso;
Frutas = DatosPartida[Calibre][0][0][0][0].nDatosFrutas;
}
// Destrio -> en caso de que la máquina tenga
Peso = DatosPartida[0][0][0][0][0].nDatosPeso;
AS += strAux;
//FIN DATOS PARTIDA
Alguem conhece alguma ferramenta para traduzir isso pra Delphi ou poderia me
dar uma força na tradução disso?
Muito obrigado pela força.
José Ricardo Aviles.
assinatura1
( Tel.....: 19 3868-7185
( Cel.....: 19 8173 0077
* E-mail: <mailto:[email protected] <mailto:jraviles%40stiware.com.br>
> [email protected] <mailto:jraviles%40stiware.com.br>
Skype: stiware
[As partes desta mensagem que não continham texto foram removidas]