sábado, 4 de agosto de 2007

JoJOjo

Me di otra vuelta por Visual Basic para ver si podía resolver problemas con la función para abrir archivos que estaba programando, leí un par de cosas que encontré con Google y, después de analizar con escrutinio los códigos, haciendo comparaciones, me di cuenta de un detalle.

-NO puedo creer... ¡que no lo haya visto!

Es algo que más que simple, parece ser tonto, un error tonto, como cuando los paradigmas nos impiden ver información contundente delante de nuestros ojos. Pongo los códigos para quien sepa Visual Basic y quera usar su valiosísimo tiempo en ver por qué es que, aunque hiciera mejoras y entendiera bien cómo funcionaba el código internamente, NUNCA iba a poder abrir una archivo:

La función OpenFile() que es donde está el error. Y más abajo anexo el EditStreamCallBack, nada más porque sí, lo sigo diseñando y prácticamente no hace otra cosa que tirar un error que me cierra todo el proceso de VB.

Sub OpenFile()
   
   If (WtFile = fBLANK) Xor (WtFile = fSAVED) Then
   
      If CommDlg(DlgOpen) Then
         
         WtFile = fBLANK
         ChangeTitleBar
         
         Dim Struct As EDITSTREAM
         Struct.pfnCallback = GetMemoryAddress(AddressOf EditStreamCallBack)
         
         Call SendMessage(hWorkArea, EM_STREAMIN, SF_TEXT, Struct)
         If Struct.dwError > 0 Then MsgBox "Error " & Struct.dwError: Exit Sub
         
      End If
      
   End If
   
End Sub


EditStreamCallBack:

Function EditStreamCallBack(ByVal dwCookie As Long, ByVal pbBuff As Long, _
                            ByVal cb As Long, ByRef pcb As Long) As Long
   
   ' pbBuff
   'Pointer to a buffer to read from or write to. _
    For a stream-in (read) operation, the callback function fills this buffer _
    with data to transfer into the rich edit control. _
    For a stream-out (write) operation, the buffer contains data from the _
    control that the callback function writes to some storage.
    
   'cb Specifies the number of bytes to read or write.
   
   'pcb Pointer to a variable that the callback function sets to the _
    number of bytes actually read or written.

   
   MsgBox pbBuff
   
   EditStreamCallBack = 0
   
   'Dim strBuffer As String
   'Dim i As Long
   
   ' Set buffer size
   'strBuffer = String$(cb, 0)
   
   ' Get the string contents
   'For i = 1 To cb
   'strBuffer = strBuffer & Chr$(Mid$(pbBuff, i, 2))
   'MsgBox pbBuff
   'Next i

   ' Set the no. of bytes received
   'pcb = pcb + i
   
   ' Add buffer to text box
   'WorkArea.TextRTF = WorkArea.TextRTF & strBuffer
   'EditStreamCallBack = 0

   
End Function



El error es algo simple, pero de lo que no me había percatado: En ningún puto momento especifico el nombre del archivo con que voy a trabajar, el que quiero abrir.





Ya con esto creo que di un pasito al frente, y no sé cómo pretendía que ByVal pbBuff As Long me mostrara texto :-S Creo que tendré que hacer uso del parámetro dwCookie y la API ReadFile(). Al parecer soy yo el que se tiene que encargar de cada String del Stream. ¡Ejem!

No hay comentarios.:

Publicar un comentario