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: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em nome de Walter Chagas (Bol) Enviada em: sexta-feira, 30 de julho de 2010 08:25 Para: delphi-br@yahoogrupos.com.br 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 wchag...@bol.com.br <mailto:wchagasj%40bol.com.br> http://delphitocorporerm.blogspot.com/ MSN: whitesock...@hotmail.com <mailto:whitesockets%40hotmail.com> SKYPE: WalterChagasJr ----- Original Message ----- From: <thevorte...@yahoo.com.br <mailto:thevortex78%40yahoo.com.br> > To: <delphi-br@yahoogrupos.com.br <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:jravi...@stiware.com.br <mailto:jraviles%40stiware.com.br> > jravi...@stiware.com.br <mailto:jraviles%40stiware.com.br> Skype: stiware [As partes desta mensagem que não continham texto foram removidas]