FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Erro 9000:
Posts: 603
Joined: Sun May 04, 2008 08:44 PM
Erro 9000:
Posted: Tue Jul 21, 2009 06:52 PM

Unrecoverable error 9000:

Destructors disabled! Destructor of class: 'ToleAuto' Can´t be executed.

why it ?

Posts: 603
Joined: Sun May 04, 2008 08:44 PM
Re: Erro 9000:
Posted: Tue Jul 21, 2009 06:56 PM

And erro show only later close App.

thanks

Posts: 603
Joined: Sun May 04, 2008 08:44 PM
Re: Erro 9000:
Posted: Wed Jul 22, 2009 04:55 AM

I recompile now my project using fwh905 and xharbour 1.2.1 more continue show message
of erro when close app.

Someone can help ? thanks

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Erro 9000:
Posted: Wed Jul 22, 2009 06:47 AM

This was the problem in an earlier version of xharbour. I too experienced this.
You may use xharbour build provided with FWH or latest from xhabour site. This problem does not exist now.

Regards



G. N. Rao.

Hyderabad, India
Posts: 603
Joined: Sun May 04, 2008 08:44 PM
Re: Erro 9000:
Posted: Wed Jul 22, 2009 08:00 AM

ageswaragunupudi,

i´m using last version of xharbour more continue problem.

what you make to solve it ?

thanks

Posts: 603
Joined: Sun May 04, 2008 08:44 PM
Re: Erro 9000:
Posted: Wed Jul 22, 2009 04:50 PM

Someone ?

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Erro 9000:
Posted: Wed Jul 22, 2009 06:14 PM

Try to assign nil to it:

oOleAutoObject := nil

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 603
Joined: Sun May 04, 2008 08:44 PM
Re: Erro 9000:
Posted: Wed Jul 22, 2009 10:14 PM

Antonio,

Im using class CActiveX and have method Release
what´s i need change ?

METHOD Release() CLASS cActiveX
//-----------------------------------------------------------------------------------------------//
If ::hSink != NIL
OleDisconnectEvents( ::hSink )
::hSink:= NIL
EndIf
If ::hObj != NIL
OleFreeDispatch( ::hObj )
::hObj:= NIL
EndIf
::aEvent:= ::aBlock:= NIL
If ::hWnd != NIL
OleWEDestroy( ::hWnd )
::hWnd := NIL
EndIf

Return NIL

in end line i do it

#include "fivewin.ch"
function main()
public oAct, ownd
define window ownd
oAct:=cActiveX():New(ProgId) // progId referente ao meu activeX

activate window ownd
oAct:release()
Release ALL
SysRefresh()

return nil

more when close app continue message Erro.

Thanks

Posts: 190
Joined: Tue Mar 14, 2006 01:59 AM
Re: Erro 9000:
Posted: Tue Sep 01, 2009 01:22 PM
Antonio,

Antonio Linares wrote:oOleAutoObject := nil

I've received an Error.log from a Client with just the single line:
"Destructors disabled! Destructor of class: 'TOLEAUTO' can't be executed."
No function names, lines or other info in the Error.log

I'm using FWH 9.05 and xH 1.2.1 provided with it.
Where should I put the line you mentioned above in my prg ?

Thanks,
Davide
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Erro 9000:
Posted: Tue Sep 01, 2009 05:10 PM

Davide,

Do it in your PRG where you no longer need your used OleAuto object

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 190
Joined: Tue Mar 14, 2006 01:59 AM
Re: Erro 9000:
Posted: Wed Sep 02, 2009 02:06 AM
Antonio,
Antonio Linares wrote:Do it in your PRG where you no longer need your used OleAuto object

I finally could replicate the problem here.

I have a window opened this way (not the main window):

Code (fw): Select all Collapse
  DEFINE WINDOW oWnd TITLE cTitle

  oActiveX = TActiveX():New( oWnd, "Shell.Explorer" )
  
  oWnd:oClient := oActiveX // To fill the entire window surface

  oActiveX:Do( "Navigate2",cUrl,,,cPostData,cType)

  ACTIVATE WINDOW oWnd MAXIMIZED VALID (oActiveX:End() , .t.) 

// 02.09.09  oActiveX := nil   // Doesn't cure the problem
// 02.09.09  oActiveX:End()    // Cures the problem, but makes the browser disappear


The problem happens when the program receives a WM_CLOSE message from an external process.
If the window above is still opened, then the error.log file is created and the window doesn't close (the main program is hanged)

Adding oActiveX:=nil after the ACTIVATE doesn't cure the problem.
Adding oActiveX:End() DOES cure it (the window gets closed with the main program by the WM_CLOSE command and no error.log is generated) but this way the browser content disappears as soon as it shown, so I cannot End() the object that way.

Any idea ?

Thanks,
Davide
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Erro 9000:
Posted: Wed Sep 02, 2009 07:41 AM
Davide,

Please try this change in Class TActiveX:
Code (fw): Select all Collapse
   METHOD Destroy() INLINE ActXEnd( ::hActiveX ), ::oOleAuto := nil, Super:Destroy()


alternatively try this:

oActiveX:oOleAuto := nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 190
Joined: Tue Mar 14, 2006 01:59 AM
Re: Erro 9000:
Posted: Thu Sep 03, 2009 01:14 AM

Antonio,

> METHOD Destroy() INLINE ActXEnd( ::hActiveX ), ::oOleAuto := nil, Super:Destroy()

this unfortunately doesn't work (looks like the program hangs before method Destroy() get fired).

> oActiveX:oOleAuto := nil

This DOES work, but ... (there's always a but) ... I also have a buttonbar on that window that performs some actions on the ActiveX object, and that line (obviously) breaks it.
Any other way to empty that object ONLY when the program receives a WM_CLOSE message ?

Thanks,
Davide

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Erro 9000:
Posted: Thu Sep 03, 2009 06:26 AM

Davide,

> Any other way to empty that object ONLY when the program receives a WM_CLOSE message ?

Call it from the VALID clause of the window. (WM_CLOSE)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 190
Joined: Tue Mar 14, 2006 01:59 AM
Re: Erro 9000:
Posted: Thu Sep 03, 2009 11:45 AM
Antonio,
Antonio Linares wrote:Call it from the VALID clause of the window. (WM_CLOSE)

already tried. The program hangs before the VALID of that Window is evaluated (otherwise the oActiveX:End() in the VALID would already correctly work)

I've found a workaround by assigning the object to a local variable before := nil , then, in the toolbar icons I restore it in its place before performing the ACTIONS and, when finished, I assign nil again.

Still searching for a better solution in the class however (perhaps tOleAuto, not tActiveX).

Hi,
Davide