FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
Pero, ¿cuál es el problema que tienes? ¿O pretendes que lo hagamos nosotros?
|
#3
|
||||
|
||||
Cita:
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. |
#4
|
||||
|
||||
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, |
#5
|
|||
|
|||
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.
Ú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 |
#6
|
||||
|
||||
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. |
#7
|
|||
|
|||
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 |
#8
|
||||
|
||||
¿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.
|
#9
|
||||
|
||||
Cita:
¿ 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 .... |
|
|
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 |
|