Ver Mensaje Individual
  #5  
Antiguo 23-03-2011
jjmcira jjmcira is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 3
Reputación: 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