FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Memoria no liberada en ActiveX - arreglado!
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Memoria no liberada en ActiveX - arreglado!
Posted: Mon Apr 06, 2009 07:59 AM
Había memoria no liberada en la Clase TActiveX. Se ha detectado y ya está arreglado :-)

En la Clase TActiveX este nuevo método tiene que ser incluido:

Code (fw): Select all Collapse
    METHOD Destroy() INLINE ActXEnd( ::hActiveX ), Super:Destroy()


Y reemplazar este módulo en FiveHCM.lib (Microsoft):
http://www.mediafire.com/?sharekey=414c ... 6e282a0ee8

O este módulo en FiveHC.lib (Borland):
http://www.mediafire.com/?sharekey=414c ... 8114394287
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Mon Apr 06, 2009 11:08 AM

como reemplazar este módulo en FiveHC.lib (Borland)????

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Mon Apr 06, 2009 12:39 PM

> como reemplazar este módulo en FiveHC.lib (Borland)????

c:\bcc55\bin\TLIB.exe FiveHC.lib -+ ACTX.obj

Para Microsoft:

LIB.EXE FiveHCM.lib /OUT:FiveHCM.lib ACTX.obj

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Mon Apr 06, 2009 05:03 PM
Sr. Antonio,

TLIB.exe FiveHC.lib -+ ACTX.obj


Como gerar este OBJ?
ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Mon Apr 06, 2009 06:13 PM

Ese OBJ esta aqui:

Y reemplazar este módulo en FiveHCM.lib (Microsoft):

http://www.mediafire.com/?sharekey=414c ... 6e282a0ee8

O este módulo en FiveHC.lib (Borland):

http://www.mediafire.com/?sharekey=414c ... 8114394287

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Mon Apr 06, 2009 09:28 PM

gracias

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 880
Joined: Fri Jan 12, 2007 08:35 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Tue Apr 07, 2009 12:01 AM
Hola Antonio :-)

ya hice los cambios que recomendaste pero cuando ejecuto un flash con fondo musical y sierro la windows a un se sigue escuchando la música :-)

hasta que cierro totalmente la aplicación ya no suena la musica :-)



a si lo tengo

Code (fw): Select all Collapse
Function aserca_de()

    local oWndx, oActiveX

   DEFINE WINDOW oWndx TITLE "Acerca de Recursos Humanos"

   oActiveX = TActiveX(): New( oWndx, "ShockwaveFlash.ShockwaveFlash.1" )

   oWndx: oClient = oActiveX 

   
   oActiveX:Do( "LoadMovie", 0, CurDrive() + ":\" + CurDir() +"\asercade.swf" )

    @ 00,01 BUTTONBMP oBtnBmp OF oWndx   ACTION (oActivex : end(),oWndx : end() ) BITMAP "ima\16x16\find2.bmp"

   ACTIVATE WINDOW oWndx VALID ( oActiveX : Do("Stop"), .T. )
                 oActivex : End()
                  oActivex : stop()
                  oActivex : = NIL
                  oActivex : destroy()
                  oActivex : do( "STOP" )
        oWndx : End()

return nil


Saluditos

Aida :-)
Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
Posts: 344
Joined: Tue Oct 11, 2005 11:33 AM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Tue Apr 07, 2009 12:10 AM
Olá Antonio,

Ao tentar incluir ACTX.OBJ em fiveHCM.lib me é retornado um erro:

Code (fw): Select all Collapse
C:\fwh\lib>lib fiveHCM.lib /OUT:FiveHCM.lib ACTX.OBJ;

Microsoft (R) Segmented Executable Linker  Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992.  All rights reserved.

LINK : warning L4017: /LIB : unrecognized option name; option ignored
LINK : warning L4017: /OUT : unrecognized option name; option ignored
LINK : fatal error L1104: fiveHCM.lib : not valid library


Com BCC eu consegui incluir O ACTX.OBJ e recompilei o FIVEH.LIB e o arquivo "HB_OUT.LOG" não foi mais gerado :-)
Obrigado, Regards, Saludos



Rossine.



Harbour and Harbour++
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Tue Apr 07, 2009 05:54 AM

Aida,

Por favor envíame por email ese fichero flash para probarlo aqui, gracias :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Tue Apr 07, 2009 05:55 AM

Rossine,

> Microsoft (R) Segmented Executable Linker

parace que llamastes a link.exe en vez de a lib.exe

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Wed Apr 08, 2009 11:15 AM

Sr. Antonio, seguindo as suas instruções percebi que o código abaixo continua a não liberar memória:


FUNCTION FLASH()


Local oDlgClient,arq:="",oRActiveX,obj1,obj2

define dialog oDlgclient resource "SOBRESISTEMA" icon oico color CLR_WHITE,CLR_WHITE
oRActiveX := TActiveX():Redefine( 10, oDlgCLIENT, arq )

redefine image obj1 id 23  of oDlgclient ENTER
redefine button obj2 id 1   of oDlgclient action (oDlgclient:End())

oDlgClient:lHelpicon:=.f.
activate dialog oDlgClient center  on init ( oRActiveX:SetProp( "wmode", "transparent" ), ;
                                             oRActiveX:SetProp( "menu", "false" ), ;
                                             oRActiveX:Do( "LoadMovie", 0, CurDrive() + ":\" + CurDir() + "\SIS.SWF" ) );
                                      valid( oRActiveX:destroy(),;
                                             oRActiveX:=nil,,.t.)

return( nil )

Com o GERENCIADOR DE TAREFAS DO WINDOWS aberto que se entrar e sair desta função varias vezes a memoria não é liberada, ou seja, vai sempre aumentando o USO DE MEMÓRIA.

Obrigado

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Wed Apr 08, 2009 11:23 AM

SGS,

Has modificado la Clase TActiveX como hemos explicado ?

En Harbour no aparece perdida de memoria, ya que en caso contrario Harbour genera un archivo .log

No llames a : Destroy(). Es llamado automaticamente.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Wed Apr 08, 2009 01:23 PM

Sr. Antonio:

activex:

// FiveWin ActiveX support (32 bits only)

include "FiveWin.ch"

ifndef XPP

#define HKEY_CLASSES_ROOT 2147483648

else

#define HKEY_CLASSES_ROOT 1

endif

//----------------------------------------------------------------------------//

CLASS TActiveX FROM TControl

CLASSDATA lRegistered AS LOGICAL

DATA hActiveX
DATA cProgID
DATA cString
DATA aProperties, aMethods, aEvents
DATA bOnEvent

METHOD New( oWnd, cProgID, nRow, nCol, nWidth, nHeight ) CONSTRUCTOR

METHOD ReDefine( nId, oWnd, cProgID ) CONSTRUCTOR

METHOD Do( cMethodName, uParam1, uParam2, uParam3 )

METHOD Display() INLINE ::BeginPaint(), ::Paint(), ::EndPaint(), 0

METHOD EraseBkGnd( hDC ) INLINE 1

METHOD GetProp( cPropName ) INLINE ;
ActXGetProperty( ActXPdisp( ::hActiveX ), cPropName )

METHOD Initiate( hDlg )

METHOD OnEvent( nEvent, aParams )

METHOD ReadTypes()

METHOD ReSize( nFlags, nWidth, nHeight ) INLINE ;
ActXSetLocation( ::hActiveX, 0, 0, nWidth, nHeight )

METHOD SetProp( cPropName, uParam1 ) INLINE ;
ActXSetProperty( ActXPdisp( ::hActiveX ), cPropName, uParam1 )

METHOD Destroy() INLINE ActXEnd( ::hActiveX ), Super:Destroy() //SR.ANTONIO LINARES
ENDCLASS

//----------------------------------------------------------------------------//

METHOD New( oWnd, cProgID, nRow, nCol, nWidth, nHeight ) CLASS TActiveX

DEFAULT oWnd := GetWndDefault(), nRow := 0, nCol := 0, nWidth := 200,;
nHeight := 200

::nTop = nRow
::nLeft = nCol
::nBottom = nRow + nHeight
::nRight = nCol + nWidth
::oWnd = oWnd
::nId = ::GetNewId()
::nStyle = nOR( WS_CHILD, WS_VISIBLE )
::cProgID = cProgID
::cString = ActXString( cProgID )

::Register()

if ! Empty( oWnd:hWnd )
::Create()
oWnd:AddControl( Self )
::hActiveX = CreateActiveX( ::hWnd, cProgID, Self )
::nTop = nRow
::nLeft = nCol
::nWidth = nWidth
::nHeight = nHeight
::ReadTypes()
else
oWnd:DefControl( Self )
endif

return Self

//----------------------------------------------------------------------------//

METHOD Do( cMethodName, uParam1, uParam2, uParam3, uParam4 ) CLASS TActiveX

local uRet

do case
case PCount() == 1
uRet = ActXInvoke( ActXPdisp( ::hActiveX ), cMethodName )

  case PCount() == 2
       uRet = ActXInvoke( ActXPdisp( ::hActiveX ), cMethodName, uParam1 )

  case PCount() == 3
       uRet = ActXInvoke( ActXPdisp( ::hActiveX ), cMethodName, uParam1, uParam2 )

  case PCount() == 4
       uRet = ActXInvoke( ActXPdisp( ::hActiveX ), cMethodName, uParam1, uParam2,;
                          uParam3 )
  case PCount() == 5
       uRet = ActXInvoke( ActXPdisp( ::hActiveX ), cMethodName, uParam1, uParam2,;
                          uParam3, uParam4 )

endcase

return uRet

//----------------------------------------------------------------------------//

METHOD ReDefine( nId, oWnd, cProgID ) CLASS TActiveX

DEFAULT oWnd := GetWndDefault()

::nId = nId
::oWnd = oWnd
::cProgID = cProgID
::cString = ActXString( cProgID )

::Register( nOR( CS_VREDRAW, CS_HREDRAW ) )

oWnd:DefControl( Self )

return Self

//----------------------------------------------------------------------------//

METHOD Initiate( hDlg ) CLASS TActiveX

Super:Initiate( hDlg )

::hActiveX = CreateActiveX( ::hWnd, ::cProgID, Self )
::ReadTypes()

return nil

//----------------------------------------------------------------------------//

METHOD OnEvent( nEvent, aParams, pParams ) CLASS TActiveX

local nAt := AScan( ::aEvents, { | aEvent | aEvent[ 2 ] == nEvent } )
local cEvent := If( nAt != 0, ::aEvents[ nAt ][ 1 ], "" )

if ! Empty( ::bOnEvent )
Eval( ::bOnEvent, If( ! Empty( cEvent ), cEvent, nEvent ), aParams, pParams )
endif

return nil

//----------------------------------------------------------------------------//

METHOD ReadTypes() CLASS TActiveX

local oReg := TReg32():New( HKEY_CLASSES_ROOT, "CLSID\" + ::cString + ;
"\InprocServer32" )
local cTypeLib := oReg:Get( "" )

oReg:Close()

if ! Empty( cTypeLib ) .and. File( cTypeLib )
::aEvents = ActXEvents( cTypeLib, ::hActiveX )
endif

return nil

//----------------------------------------------------------------------------//

prg:


FUNCTION FLASH()


Local oDlgClient,arq:="",oRActiveX,obj1,obj2

if file("SGSIS.SWF")

if ! FLASHActivex(@arq)
   return(.f.)
endif

define dialog oDlgclient resource "SOBRESISTEMA" icon oico color CLR_WHITE,CLR_WHITE
oRActiveX := TActiveX():Redefine( 10, oDlgCLIENT, arq )

redefine image  obj1 id 23  of oDlgclient RESOURCE 'SGFOODS' CENTER
redefine button obj2 id 1   of oDlgclient action (oDlgclient:End())

oDlgClient:lHelpicon:=.f.
activate dialog oDlgClient center  on init ( oRActiveX:SetProp( "wmode", "transparent" ), ;
                                             oRActiveX:SetProp( "menu", "false" ), ;
                                             oRActiveX:Do( "LoadMovie", 0, CurDrive() + ":\" + CurDir() + "\SGSIS.SWF" ) )

endif

return( nil )

Sr. Antonio, adicionei ACTIVEX.PRG ao meu projeto e mesmo assim, continua a NÃO LIBERAR memória!

:(

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 230
Joined: Sat Apr 19, 2008 10:28 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Sun Nov 08, 2009 07:04 PM

El link para bajar el fichero "actx.obj" está roto. ¿Donde se puede descargar?
Es compatible con FWH 8.06 y Harbour 1.0.1 ?

Gracias

Alvaro

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Memoria no liberada en ActiveX - arreglado!
Posted: Sun Nov 08, 2009 10:03 PM

Alvaro,

Aqui está actx.obj: http://www.mediafire.com/file/hjdi0lzjdem/ACTX.obj

En cuanto a la compatibilidad con 8.06 tendrás que probarlo tu mismo. No sabriamos decirte de memoria si funcionará con una versión de FWH del año pasado.

regards, saludos

Antonio Linares
www.fivetechsoft.com