Erro 9000:

lailton.webmaster
Posts: 603
Joined: Sun May 04, 2008 8:44 pm

Erro 9000:

Post by lailton.webmaster »

Unrecoverable error 9000:

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

why it ?
lailton.webmaster
Posts: 603
Joined: Sun May 04, 2008 8:44 pm

Re: Erro 9000:

Post by lailton.webmaster »

And erro show only later close App.

thanks
lailton.webmaster
Posts: 603
Joined: Sun May 04, 2008 8:44 pm

Re: Erro 9000:

Post by lailton.webmaster »

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
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Erro 9000:

Post by nageswaragunupudi »

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
lailton.webmaster
Posts: 603
Joined: Sun May 04, 2008 8:44 pm

Re: Erro 9000:

Post by lailton.webmaster »

ageswaragunupudi,

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

what you make to solve it ?

thanks
lailton.webmaster
Posts: 603
Joined: Sun May 04, 2008 8:44 pm

Re: Erro 9000:

Post by lailton.webmaster »

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

Re: Erro 9000:

Post by Antonio Linares »

Try to assign nil to it:

oOleAutoObject := nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
lailton.webmaster
Posts: 603
Joined: Sun May 04, 2008 8:44 pm

Re: Erro 9000:

Post by lailton.webmaster »

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
Davide
Posts: 190
Joined: Tue Mar 14, 2006 1:59 am
Location: Italy

Re: Erro 9000:

Post by Davide »

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

Re: Erro 9000:

Post by Antonio Linares »

Davide,

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

Antonio Linares
www.fivetechsoft.com
Davide
Posts: 190
Joined: Tue Mar 14, 2006 1:59 am
Location: Italy

Re: Erro 9000:

Post by Davide »

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: Select all

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

Re: Erro 9000:

Post by Antonio Linares »

Davide,

Please try this change in Class TActiveX:

Code: Select all

   METHOD Destroy() INLINE ActXEnd( ::hActiveX ), ::oOleAuto := nil, Super:Destroy()
 
alternatively try this:

oActiveX:oOleAuto := nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Davide
Posts: 190
Joined: Tue Mar 14, 2006 1:59 am
Location: Italy

Re: Erro 9000:

Post by Davide »

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

Re: Erro 9000:

Post by Antonio Linares »

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
Davide
Posts: 190
Joined: Tue Mar 14, 2006 1:59 am
Location: Italy

Re: Erro 9000:

Post by Davide »

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