Kiko:

Basicamente no deberias tener que hacer nada.
El tema del free es para tratar de liberar rapidamente la interfaz, más
rápido que lo que seria usando finalización.
Esto es util cuando necesitas forzar a que la finalizacion ocurra en un
momento determinado, que vos tengas el control.

De donde obtuviste ITVEngine? De otra interfaz? Porque en ese caso quizas
tenes que tener en cuenta el orden en que liberas.
Tambien asegurate que ese free hace lo que Andy dice, luego deberia enviarle
beUnfinalizable, fijate que el stack muestra que se envio el finalize, eso
es que esta marcado para finalizar.

Saludos


2010/5/14 Jose Gregoris <[email protected]>

> Hola Gente
>
> Al  cerrar mi aplicación acurrió esto:
>
>
> 10:46:48, martes, 11 de mayo de 2010: Unhandled exception - a
> GPFault('Invalid access to memory location. Reading 0x6C, IP 0x27FB91A
> (C:\Documents and Settings\Gregoris.GREGORIS-3FDB03\Mis documentos\Dolphin
> Smalltalk X6\TerrainEditor\Library\TVb3D65.dll)')
>
> ProcessorScheduler>>gpFault:
> [] in ProcessorScheduler>>vmi:list:no:with:
> BlockClosure>>ifCurtailed:
> ProcessorScheduler>>vmi:list:no:with:
> ITVEngine(ExternalStructure)>>invalidCall
> ITVEngine(IUnknown)>>Release
> ITVEngine(COMInterface)>>basicFree
> ITVEngine(IDispatch)>>basicFree
> ITVEngine(COMInterface)>>free
> ITVEngine(Object)>>finalize
> MemoryManager>>administerLastRites
> MemoryManager>>finalizerMain
> [] in MemoryManager>>forkFinalizer
> ExceptionHandler(ExceptionHandlerAbstract)>>markAndTry
> [] in ExceptionHandler(ExceptionHandlerAbstract)>>try:
> BlockClosure>>ifCurtailed:
> BlockClosure>>ensure:
> ExceptionHandler(ExceptionHandlerAbstract)>>try:
> BlockClosure>>on:do:
> [] in BlockClosure>>newProcess
>
> A que se puede deber este error ?
> TV3D es una interface COM, yo nunca hago un release de los componetes pues
> se supone que esto se hace solo cuando no hay referencias al componente.Por
> lo que dice la documentacion de dolphin.
>
> Pero hay cosas que me confunde, como por ejemplo esto que dice la
> documentacion:
>
> 3. If the object has a method for explicitly freeing its external
> resource(s) programmatically (which will be the case if you've followed the
> Object Liberation Strategy), then remove the finalization mark immediately
> after freeing the resource, by sending the #beUnfinalizable message. This
> reduces finalization overhead and allows objects to die sooner.
>
> Lo que entiendo es que si hay algo que deba ser destruido a pata, hay que
> hacer lo que dice arriba.
> El tema que Andy Bowen en su ejemplo con TV3D hace esto:
>
> MainView>>onViewDestroyed
>     Current == self
>         ifTrue:
>             [self engine free.
>             Current := nil].
>     super onViewDestroyed
>
> Pero ITVEngine no tiene un destructor especial !.
>
> Me aclaran como se tratan los COM y su release ?
>
>
> saludos kiko
>
>
>
>
>
>
> --
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]<clubsmalltalk%[email protected]>
>
> http://www.clubSmalltalk.org

-- 
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]

http://www.clubSmalltalk.org

Responder a