Memoria no liberada en ActiveX - arreglado!

Memoria no liberada en ActiveX - arreglado!

Postby Antonio Linares » Mon Apr 06, 2009 7: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: Select all  Expand view

    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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Memoria no liberada en ActiveX - arreglado!

Postby MGA » Mon Apr 06, 2009 11:08 am

como reemplazar este módulo en FiveHC.lib (Borland)????
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: Memoria no liberada en ActiveX - arreglado!

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Memoria no liberada en ActiveX - arreglado!

Postby MGA » Mon Apr 06, 2009 5:03 pm

Sr. Antonio,

TLIB.exe FiveHC.lib -+ ACTX.obj


Como gerar este OBJ?
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: Memoria no liberada en ActiveX - arreglado!

Postby Antonio Linares » Mon Apr 06, 2009 6: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Memoria no liberada en ActiveX - arreglado!

Postby MGA » Mon Apr 06, 2009 9:28 pm

gracias
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: Memoria no liberada en ActiveX - arreglado!

Postby AIDA » Tue Apr 07, 2009 12:01 am

Hola Antonio :D

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 :shock:

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



a si lo tengo

Code: Select all  Expand view

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 :wink:
Last edited by AIDA on Tue Apr 07, 2009 12:12 am, edited 2 times in total.
Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
User avatar
AIDA
 
Posts: 877
Joined: Fri Jan 12, 2007 8:35 pm

Re: Memoria no liberada en ActiveX - arreglado!

Postby Rossine » Tue Apr 07, 2009 12:10 am

Olá Antonio,

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

Code: Select all  Expand view

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 :D
Obrigado, Regards, Saludos

Rossine.

Harbour and Harbour++
Rossine
 
Posts: 344
Joined: Tue Oct 11, 2005 11:33 am

Re: Memoria no liberada en ActiveX - arreglado!

Postby Antonio Linares » Tue Apr 07, 2009 5:54 am

Aida,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Memoria no liberada en ActiveX - arreglado!

Postby Antonio Linares » Tue Apr 07, 2009 5: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Memoria no liberada en ActiveX - arreglado!

Postby MGA » 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

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: Memoria no liberada en ActiveX - arreglado!

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Memoria no liberada en ActiveX - arreglado!

Postby MGA » Wed Apr 08, 2009 1: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

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: Memoria no liberada en ActiveX - arreglado!

Postby alvaro533 » Sun Nov 08, 2009 7: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
alvaro533
 
Posts: 206
Joined: Sat Apr 19, 2008 10:28 pm
Location: Madrid, España

Re: Memoria no liberada en ActiveX - arreglado!

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 87 guests