Memoria no liberada en ActiveX - arreglado!

User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Memoria no liberada en ActiveX - arreglado!

Post by Antonio Linares »

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

    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
MGA
Posts: 1218
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Re: Memoria no liberada en ActiveX - arreglado!

Post by MGA »

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

FWH17.04
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Memoria no liberada en ActiveX - arreglado!

Post by Antonio Linares »

> 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
MGA
Posts: 1218
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Re: Memoria no liberada en ActiveX - arreglado!

Post by MGA »

Sr. Antonio,

TLIB.exe FiveHC.lib -+ ACTX.obj


Como gerar este OBJ?
ubiratanmga@gmail.com

FWH17.04
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Memoria no liberada en ActiveX - arreglado!

Post by Antonio Linares »

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
MGA
Posts: 1218
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Re: Memoria no liberada en ActiveX - arreglado!

Post by MGA »

gracias
ubiratanmga@gmail.com

FWH17.04
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
User avatar
AIDA
Posts: 782
Joined: Fri Jan 12, 2007 8:35 pm

Re: Memoria no liberada en ActiveX - arreglado!

Post by AIDA »

Hola Antonio :D

ya hice _ 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

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ǝ
Rossine
Posts: 343
Joined: Tue Oct 11, 2005 11:33 am

Re: Memoria no liberada en ActiveX - arreglado!

Post by Rossine »

Olá Antonio,

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

Code: Select all

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.

xHarbour comercial (xAcc) -> Testando harbour + bcc / msvc
fwh 9.05
Windows XP SP2
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Memoria no liberada en ActiveX - arreglado!

Post by Antonio Linares »

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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Memoria no liberada en ActiveX - arreglado!

Post by Antonio Linares »

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
MGA
Posts: 1218
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Re: Memoria no liberada en ActiveX - arreglado!

Post by MGA »

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

FWH17.04
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Memoria no liberada en ActiveX - arreglado!

Post by Antonio Linares »

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
MGA
Posts: 1218
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Re: Memoria no liberada en ActiveX - arreglado!

Post by MGA »

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

FWH17.04
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
alvaro533
Posts: 179
Joined: Sat Apr 19, 2008 10:28 pm
Location: Madrid, España

Re: Memoria no liberada en ActiveX - arreglado!

Post by alvaro533 »

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

Re: Memoria no liberada en ActiveX - arreglado!

Post by Antonio Linares »

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
Post Reply