Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-03-2011
jjmcira jjmcira is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 3
Poder: 0
jjmcira Va por buen camino
Smile Conversion de VB a Delphi

Hola Amigos, soy nuevo en la programaciion delPhi, y tengo que entregar un proyecto de lecturad de logs de unos lectores biometricos, consegui este codigo pero tengo algunos problemas en la parte de conversion, no se si alguien me pudiera ayudar a convertir este a delphi, se los voy a agradecer mucho. gracias de Antemano

Private Const MAX_DATALOGS As Integer = 500
Dim TotalEntries As Integer, numTrans As Integer
Dim Manejador_Memoria As IntPtr = IntPtr.Zero
Dim buffSizeTotal As Integer, buffSize1Trans As Integer, lStatus As Integer
Dim BII_Transaction As cDatalogVF.BII_Transaction_Log_Struct

'checa si la terminal no esta Busy
'1 The MV1200 is busy.
'0 The(MV1200 Is idle)
'2 The MV1200 is cleaning up flash
'Error(<0) An error specified in the error table. See end of chapter for a description.
lStatus = cDatalogVF.BII_Status_MT(HUNIT)
If lStatus <> 0 Then
Return False
End If

' Determina el total de todas las transacciones
TotalEntries = cDatalogVF.BII_Get_Num_Transaction_Log_MT(HUNIT, cDatalogVF.ALL_TRANSACTIONS)
If TotalEntries < 0 Then
Return False
End If

m_NumTransToEvaluate = -1
m_NumTransProcessed = 0

buffSize1Trans = Marshal.SizeOf(BII_Transaction.GetType)
m_Resul = 1
' el while tiene como fin leer por bloques de MAX_DATALOGS todas las transaccines almacenadas
' en el lector e irlas procesando, mientras...
While TotalEntries > 0 And m_Resul > 0 And lStatus = 0
' mientras haya checadas y no se tengan errores
If TotalEntries > MAX_DATALOGS Then
numTrans = MAX_DATALOGS
Else
numTrans = TotalEntries
End If
TotalEntries -= numTrans
Try
' calcula el tamaño de todo el buffer de transacciones a bajar
buffSizeTotal = buffSize1Trans * numTrans
Dim rawData(buffSizeTotal - 1) As Byte
Manejador_Memoria = Marshal.AllocHGlobal(buffSizeTotal)

'checa si la terminal no esta Busy
lStatus = cDatalogVF.BII_Status_MT(HUNIT)
If lStatus = 0 Then
' baja el buffer y las marca como leidas
m_Resul = cDatalogVF.BII_Read_Transaction_Log_MT(HUNIT, cDatalogVF.ALL_TRANSACTIONS, 1, numTrans, Manejador_Memoria)
If m_Resul > 0 Then
' copia el buffer de memoria en un arreglo de bytes
Marshal.Copy(Manejador_Memoria, rawData, 0, buffSizeTotal)
Marshal.FreeHGlobal(Manejador_Memoria)
'por cada una de las transaciones bajadas
For i As Integer = 0 To numTrans - 1
Manejador_Memoria = Marshal.AllocHGlobal(buffSize1Trans)
'toma del arreglo de bytes la porcion correspondiente a la transacciones y lo copia en un buffer de memoria
Marshal.Copy(rawData, i * buffSize1Trans, Manejador_Memoria, buffSize1Trans)
BII_Transaction = CType(Marshal.PtrToStructure(Manejador_Memoria, GetType(cDatalogVF.BII_Transaction_Log_Struct)), cDatalogVF.BII_Transaction_Log_Struct)
'---------------------------------------------------------------------
' registra la transaccion
WriteTransacc(BII_Transaction)
'---------------------------------------------------------------------
Marshal.FreeHGlobal(Manejador_Memoria)
Manejador_Memoria = IntPtr.Zero
Next
Marshal.FreeHGlobal(Manejador_Memoria)
Manejador_Memoria = IntPtr.Zero
End If
End If 'If lStatus = 0 Then
Catch ex As Exception
lStatus = -99 'Error generico
Finally
If Not Manejador_Memoria.Equals(IntPtr.Zero) Then Marshal.FreeHGlobal(Manejador_Memoria)
Manejador_Memoria = IntPtr.Zero
End Try
'checa si la terminal no esta Busy
lStatus = cDatalogVF.BII_Status_MT(HUNIT)
If lStatus = 0 And m_Resul > 0 Then
' borra las transacciones marcadas como ya leidas
m_Resul = cDatalogVF.BII_Erase_Transaction_Log_MT(HUNIT, cDatalogVF.ONLY_READ_TRANSACTIONS, cDatalogVF.ASYNC_MODE)
End If 'If lStatus <> 0 Then
End While
' Una vez obtenidas todas dispara el evento OnDatalogTransactions avisando que ya termino
Responder Con Cita
  #2  
Antiguo 16-03-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Pero, ¿cuál es el problema que tienes? ¿O pretendes que lo hagamos nosotros?
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 16-03-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jjmcira Ver Mensaje
Hola Amigos, soy nuevo en la programaciion delPhi, y tengo que entregar un proyecto de lecturad de logs de unos lectores biometricos, consegui este codigo pero tengo algunos problemas en la parte de conversion, no se si alguien me pudiera ayudar a convertir este a delphi, se los voy a agradecer mucho.
Hola y bienvenido a los foros.
Te recomiendo que revises la Guía de estilo.

En cuanto a tu petición, pues dicho así la verdad es que dan pocas ganas; Creo yo que lo más lógico es que intentaras hacer la traducción (si quieres puedes poner ambos códigos) y si tienes algun problema en algo concreto te echamos un cable, pero tal cual está ahora...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 16-03-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola,
Y por si fuera poco, casi de nada serviría intentar hallar un código equivalente en Delphi que funcione porque simplemente NO NECESARIAMENTE SE PUEDE NI DEBE seguir línea a línea.

Máxime al tratarse de un lector biométrico, deberías estar bien al tanto que estos equipos vienen (bueno, en realidad por lo general uno debe descargarlos desde el sitio de la empresa distribuidora) con SDK, dlls, paquetes, componentes, y/o bibliotecas para funcionar y comunicarse con dichos aparatitos.
Algunos se pueden instalar y funcionar para algunos lenguaje, y hasta depender incluso de la versión (quien te dice, si es que existe algo para Delphi, que sea para D7 y tu usas un Delphi superior o inferior).

Asi que la tienes bastante complicada. Deberás probar suerte fijándote en la página del distribuidor del dichoso aparatito si es que algo con que funcionar en Delphi... y no está demás decir que es MUY NECESARIO leer la documentación técnica, y/o manual.

Si deseas recibir ayuda, facilita eso. Al menos hubieras dicho "Disculpen, se me olvidaba decir que el lector es el modelo tal" como para tener alguna pista, ¡que no somos adivinos!

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 23-03-2011
jjmcira jjmcira is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 3
Poder: 0
jjmcira Va por buen camino
Perdon

Les comento que la unidad a la cual deseo realizar la conexion es una Lectora Biometrica V-Station 4G, ya logre convertir algo de codigo a delphi pero no encuentro el similar en Delphi para la parte de Marshall, les indico donde me marca el error.

Gracias de antemano.

Código Delphi [-]

procedure TForm1.Button1Click(Sender: TObject);
var
  max_datalogs, TotalEntries, numTrans, All_Transactions: Integer ;
  Manejador_Memoria, IntPtr: ^integer ;
  m_pUnitHandle: HUNIT ;
  buffSizeTotal, buffSize1Trans, lStatus, m_NumTransToEvaluate, m_NumTransProcessed, m_Result: Integer;
  BII_Transaction: BII_Transaction_Log_Struct ;
begin
  Max_Datalogs := 500;
  Manejador_Memoria:= IntPtr;
  All_Transactions := 0;
  m_pUnitHandle:= null;
// 0 - All Transactions Log
// 1 - Only un-read entries
//        'checa si la terminal no esta Busy
//        '1          The MV1200 is busy.
//        '0          The(MV1200 Is idle)
//        '2          The MV1200 is cleaning up flash
//        'Error(<0)  An error specified in the error table. See end of chapter for a description.
  lStatus := BII_Status_MT(m_pUnitHandle) ;
  if lStatus <> 0 then begin
  end ;
//        ' Determina el total de todas las transacciones
  TotalEntries := BII_Get_Num_Transaction_Log_MT(m_pUnitHandle, ALL_TRANSACTIONS);
  if TotalEntries <0 then begin
  end;
  m_NumTransToEvaluate := -1 ;
  m_NumTransProcessed  := 0 ;
 // buffSize1Trans := Marshal.SizeOf(BII_Transaction.GetType);
  m_Result := 1 ;
//        ' el while tiene como fin leer por bloques de MAX_DATALOGS todas las transaccines almacenadas
//        ' en el lector e irlas procesando, mientras...
  While TotalEntries > 0 And m_Result > 0 And lStatus := 0 do
//            ' mientras haya checadas y no se tengan errores
  begin
  If TotalEntries > MAX_DATALOGS then begin
     numTrans := MAX_DATALOGS ;
  end
  else
     begin
     numTrans := TotalEntries;
     End ;
  TotalEntries := numTrans ;
  Try
//  ' calcula el tamaño de todo el buffer de transacciones a bajar
     buffSizeTotal := buffSize1Trans * numTrans  ;
     rawData: array[buffSizeTotal..-1] of Byte ;
//     Dim rawData(buffSizeTotal - 1) As Byte
     Manejador_Memoria := Marshal.AllocHGlobal(buffSizeTotal) ;
//    'checa si la terminal no esta Busy
     lStatus := BII_Status_MT(m_pUnithandle)
     If lStatus := 0 Then
//  ' baja el buffer y las marca como leidas
     m_Result := BII_Read_Transaction_Log_MT(m_pUnitHandle, ALL_TRANSACTIONS, 1, numTrans, Manejador_Memoria)
     If m_Resul > 0 Then
//    ' copia el buffer de memoria en un arreglo de bytes
     Marshal.Copy(Manejador_Memoria, rawData, 0, buffSizeTotal)
     Marshal.FreeHGlobal(Manejador_Memoria)
//   'por cada una de las transaciones bajadas
{     For i := 0 To numTrans - 1
         Manejador_Memoria = Marshal.AllocHGlobal(buffSize1Trans)
//       'toma del arreglo de bytes la porcion correspondiente a la transacciones y lo copia en un buffer de memoria
         Marshal.Copy(rawData, i * buffSize1Trans, Manejador_Memoria, buffSize1Trans)
         BII_Transaction := CType(Marshal.PtrToStructure(Manejador_Memoria, GetType(BII_Transaction_Log_Struct)), cDatalogVF.BII_Transaction_Log_Struct)
//       '---------------------------------------------------------------------
//       ' registra la transaccion
         WriteTransacc(BII_Transaction)
//       '---------------------------------------------------------------------
         Marshal.FreeHGlobal(Manejador_Memoria)
         Manejador_Memoria = IntPtr.Zero
         Next
         Marshal.FreeHGlobal(Manejador_Memoria)
         Manejador_Memoria = IntPtr.Zero
         End If
         End If   'If lStatus = 0 Then
         Catch ex As Exception
                lStatus = -99   'Error generico
            Finally
                If Not Manejador_Memoria.Equals(IntPtr.Zero) Then Marshal.FreeHGlobal(Manejador_Memoria)
                Manejador_Memoria = IntPtr.Zero
            End Try
            'checa si la terminal no esta Busy
            lStatus = cDatalogVF.BII_Status_MT(HUNIT)
            If lStatus = 0 And m_Resul > 0 Then
//                ' borra las transacciones marcadas como ya leidas
                m_Resul = cDatalogVF.BII_Erase_Transaction_Log_MT(HUNIT, cDatalogVF.ONLY_READ_TRANSACTIONS, cDatalogVF.ASYNC_MODE)
            End If   'If lStatus <> 0 Then
        End While
//        ' Una vez obtenidas todas dispara el evento OnDatalogTransactions avisando que ya termino
  }
end;

Última edición por Neftali [Germán.Estévez] fecha: 23-03-2011 a las 08:56:47. Razón: Añadir TAG's al cídigo
Responder Con Cita
  #6  
Antiguo 23-03-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
He añadido TAG's a tu código para que sea más legible.
Estaría bien que nos dijeras qué error te da (la descripción exacta que te devuelve) y la línea para poder ayudarte.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 23-03-2011
jjmcira jjmcira is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 3
Poder: 0
jjmcira Va por buen camino
Error en Marshal

Si te comento que todo va bien hasta en la parte en donde utilizo el Marshal, y es que estuve buscando como seria el indicado en delphi pero no encuentro el sustituto para el manejo de buffers como lo indica.

Gracias
Responder Con Cita
  #8  
Antiguo 06-04-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
¿Qué es el "Marshal"? ¿Y cual es el problema exacto? Es que no tengo Delphi (soy un esquirol que usa Lazarus ) y no puedo compilarlo.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #9  
Antiguo 06-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por jjmcira Ver Mensaje
Si te comento que todo va bien hasta en la parte en donde utilizo el Marshal, y es que estuve buscando como seria el indicado en delphi pero no encuentro el sustituto para el manejo de buffers como lo indica.

Gracias
Hola jjmcira.

¿ Podrías indicar literalmente el mensaje de error que te arroja ?

También sería excelente, si usases un Break Point. (click sobre el márgen izquierdo no editable):



Y luego hagas Trace Into con la tecla F7, así podrás identificar la línea donde se genera la excepción.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Conversión de caracteres delphi 7 y 2009 ander Varios 0 03-12-2009 15:37:12
...conversión... Jure Humor 2 14-01-2008 19:51:59
Conversion a delphi 6 mapc Varios 2 01-09-2006 14:27:56
Conversión de linea en Vbasic a Delphi torito Varios 4 09-06-2005 19:38:00
conversion BMP -> PCX dmariscal Gráficos 1 10-06-2003 01:56:17


La franja horaria es GMT +2. Ahora son las 02:44:27.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi