FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Array de un EXE a otro
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Array de un EXE a otro
Posted: Wed Aug 11, 2010 03:09 AM
Buenas noches,

Hay alguna forma de devolver un array como dato al cerrar el exe2 para que otro Exe, el Exe1 lo capture y lo use?

Algo así como desde el exe_1 llamo al exe_2 y este exe_2 me devuelve un array que luego usaré.

Algo así como esto (que no funciona así):
Code (fw): Select all Collapse
// exe_1.exe

Function Main1()
    local aArray1 := winexec("exe_2.exe",3)
    msginfo(aArray[1]+"   "+aArray[2])
Return nil


y
Code (fw): Select all Collapse
// exe_2.exe

Function Main2()
    local aArray2:={"data1","data2"}
Return aArray2


Gracias.

Rolando :-)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Array de un EXE a otro
Posted: Wed Aug 11, 2010 03:34 AM

Rolando,

Un programa cuando se ejecuta solo puede devolver un número.

Lo más sencillo sería que crees un fichero en disco con el contenido del array y luego lo leas desde el otro EXE

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM
Re: Array de un EXE a otro
Posted: Wed Aug 11, 2010 05:07 AM
Rolando,

Coincido con Antonio.

Encontre estas funciones en el baul del recuerdo.
Code (fw): Select all Collapse
Static Function SaveArr2File( A_, cFilNam )
Local Success := .F., Handle := Fcreate( cFilNam )
If Handle != -1
    Success := ElementOut( Handle, A_ )
    Fclose( Handle )
EndIf
Return( Success )
*----*
Function ElementOut( Handle, A_ )
Local Success := .T., i, Buffer, Cnt := Len( A_ )
Fwrite( Handle, I2Bin( Cnt ) )
For i =1To Cnt
    If ( A_[i] = NIL ) .OR. ( ValType( A_[i] ) = "B" )
        Buffer := "Z" + I2Bin(1) + "Z"
    Else
        Buffer := ValType( A_[i] )
        Do Case
            Case Buffer = "C"
                Buffer += I2Bin( Len( A_[i] ) )
                Buffer += A_[i]
            Case Buffer = "D"
                Buffer += I2Bin(8)
                Buffer += DtoC( A_[i] )
            Case Buffer = "L"
                Buffer += I2Bin(1)
                Buffer += If( A_[i], "T", "F" )
            Case Buffer = "N"
                Buffer += I2Bin( Len( Ltrim( Str( A_[i] ) ) ) )
                Buffer += Ltrim( Str( A_[i] ) )
        OtherWise
        EndCase
    EndIf
    If Fwrite( Handle, Buffer, Len( Buffer) ) != Len( Buffer )
        Success := .F.
        Exit
    EndIf
    If Left( Buffer,1) == "A"
        ElementOut( Handle, A_[i] )
    EndIf
Next i
Return( Success )
*----*

Code (fw): Select all Collapse
Static Function RestArr2Mem( cFilNam )
Local Handle, A_ := {}
If ( Handle := Fopen( cFilNam ) ) != -1
     ElementIn( Handle, A_ )
EndIf
Fclose( Handle )
Return( A_ )
*----*
Static Function ElementIn( Handle, A_ )
Local Buffer, i, Cnt, iLen, iType
Buffer := Space( 2 )
If Fread( Handle, @Buffer, 2 ) = 2
    Cnt := Bin2w( Buffer )
    For i = 1 To Cnt
        If ( iType := FreadStr( Handle, 1 ) ) = "A"
            AaDd( A_, {} )
            ElementIn( Handle, A_[ Len( A_ ) ] )
        Else
            Buffer := Space( 2 )
            If Fread( Handle, @Buffer, 2 ) = 2
                iLen := Bin2w( Buffer )
                Buffer := Space( iLen )
                If Fread( Handle, @Buffer, iLen ) = iLen
                    Do Case
                        Case ( iType = "B") .OR. ( iType = "Z" )
                            AaDd( A_, NIL )
                        Case iType = "C"
                            AaDd( A_, Buffer )
                        Case iType = "D"
                            AaDd( A_, CtoD( Buffer ) )
                        Case iType = "L"
                            AaDd( A_, ( Buffer == "T" ) )
                        Case iType = "N"
                            AaDd( A_, Val( Buffer ) )
                    EndCase
                EndIf
            EndIf
        EndIf
    Next i
EndIf
Return( NIL )
*----*

Espero te sirvan para lo que quieres hacer.

Saludos
FWH 10.6 + xHarbour + Borland 582
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Array de un EXE a otro
Posted: Wed Aug 11, 2010 11:52 AM

Buen día,

Gracias a ambos por responder.

Lo implementaré de ese modo. Ya tengo una función para guardar y leer array's. Sólo quería sacarme la duda si se podía hacer de otra manera.

Saludos.

Rolando :D

Continue the discussion