[gme-users] GME BON2 Add-on throws an exception everytime that can't becaught!!!!!

Zoltan Molnar zolmol at isis.vanderbilt.edu
Thu Jan 12 12:06:29 CST 2006


What code do you have in globalEventPerformed() ?
Do you experience that exception upon import, if you comment out
objectEventPerformed()'s contents?

A Note: Import/Open/Close use-case is special for the following reason:
the GUI (GME.Application COM object) is being registered/deregistered as
a client of the Mga.Project COM object, just to-be-created.
Thus, if you just write into globalEventPerformed the following command:

	m_project->consoleMsg( "Global Event happened: Import XML",
MSG_INFO);

It will cause exactly the same uncatchable exception [which you are
facing now], becaue the consoleMsg method tries to get from the
MgaProject its client called: GME.Application, which is not yet
registered, because the process of opening is under way.
For this reason I have introduced into Bon2 the 
Bool isGmeAvailable() const method.
The correct form then:
	if( m_project->isGmeAvailable())
		m_project->consoleMsg( "....", ...);

This BON2 update will come in the next release.

Zoli

> -----Original Message-----
> From: gme-users-bounces at list.isis.vanderbilt.edu 
> [mailto:gme-users-bounces at list.isis.vanderbilt.edu] On Behalf 
> Of James Hill
> Sent: Wednesday, January 11, 2006 7:17 PM
> To: gme-users
> Subject: [gme-users] GME BON2 Add-on throws an exception 
> everytime that can't becaught!!!!!
> 
> 
> Hello all,
> 
> I am creating an add-on and its throwing an exception that I 
> can't catch. I have tried adding a try...catch block around 
> my code and it's still failing. The exception is apparently 
> being thrown deep inside of BON and within the scope of the 
> method that calls Component::objectEventPerformed (). The 
> exception that is occuring is **Unhandled and unknown 
> exception was thrown in BON2Component
> ObjectEvent!** This exception is thrown everytime I try to 
> import an XME file. The add-on works fine while the project 
> is open and being used. I have enclosed the source code since 
> it's small. Any assistance as to what I am doing wrong is 
> greatly appreciated.
> 
> void Component::objectEventPerformed( Object& object, 
> unsigned long event, VARIANT v ) {
>   try
>   {
>     // Get the name of the object type. Only monitor <Component> 
>     // and <ComponentAssembly> objects.
>     std::string name = object->getObjectMeta ().name ();
> 
>     if (name == "Component" || name == "ComponentAssembly")
>     {
>       BON::FCO fco = object;
>       BON::Attribute uuid = fco->getAttribute ("UUID");
> 
>       if (uuid)
>       {
>         // We only handle the creation events at this stage.
>         if (event == MON::OET_ObjectCreated)
>         {
>           // Create an UUID and add the <uuid_manager_> event
>           // listener to the object.
>           uuid->setStringValue (PICML::CreateUuid ());     
>         }
>         else if (event == MON::OET_AttributeChanged)
>         {
>           // Validate the UUID of the object.
>           if (!PICML::ValidUuid (uuid->getStringValue ()))
>           {
>             uuid->setStringValue (PICML::CreateUuid ());
>           }
>         }
>       }
>     }
>   }
>   catch (...)
>   {
>     // This does not catch the exception!!! It's being caught 
> in ComponentObj.
>     // Some local variable defined before invoking this 
> method throws an exception
>     // whenever it is destroyed. I have no idea why?!?!?!
>     AfxMessageBox ("Gotcha");
>   }
> 
> Thanks,
> 
> James
> 
> --------------------------------------------
> 
> James H. Hill - Ph.D. Student
> Research Assistant - ISIS / DOC Group
> 
> Microsoft Student Ambassador
> Department of EECS / Computer Science Program
> Vanderbilt University, Nashville, TN
> 
> Email: j.hill at vanderbilt.edu 
> 
> _______________________________________________
> gme-users mailing list
> gme-users at list.isis.vanderbilt.edu
> http://list.isis.vanderbilt.edu/mailman/listinfo/gme-users
> 


More information about the gme-users mailing list