Resources | developer.brewmp.com Resources | developer.brewmp.com

Developer

resources

IFlip sample code, part 2

Definition and implementation of the AEEClsCreateInstance() function.

/*===============================================================================
FUNCTION DEFINITIONS
=============================================================================== */

/*===========================================================================
FUNCTION: AEEClsCreateInstance

DESCRIPTION
	  This function is invoked while the app is being loaded. All Modules must provide this 
  	function. Ensure to retain the same name and parameters for this function.
  	In here, the module must verify the ClassID and then invoke the AEEApplet_New() 
  	function that has been provided in AEEAppGen.c. 

   After invoking AEEApplet_New(), this function can do app specific initialization. In 
   this example, a generic structure is provided so that app developers need not change 
   app specific initialization section every time except for a call to 
   IDisplay_InitAppData(). This is done as follows: InitAppData() is called to initialize 
   AppletData instance. It is the app developers responsibility to fill-in app data 
   initialization code of InitAppData(). App developer is also responsible to release  
   memory allocated for data contained in AppletData -- this can be done in 
   IDisplay_FreeAppData().

PROTOTYPE:
   int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj);

PARAMETERS:
	clsID: [in]: Specifies the class ID of the applet which is being loaded.

	pIShell: [in]: Contains a pointer to the IShell object. 

	pIModule: pin]: Contains a pointer to the IModule object to the current module to which
	this app belongs.

	ppObj: [out]: On return, *ppObj must point to a valid IApplet structure. Allocation
	of memory for this structure and initializing the base data members is done by 
 AEEApplet_New().

DEPENDENCIES
  None

RETURN VALUE
   AEE_SUCCESS: If the app needs to be loaded and if AEEApplet_New() invocation was 
                successful.
   AEE_EFAILED: If the app does not need to be loaded or if errors occurred in 
                AEEApplet_New().  
                If this function returns FALSE, the app will not be loaded.

SIDE EFFECTS
  None

===========================================================================*/
int AEEClsCreateInstance(AEECLSID ClsId, IShell *pIShell, IModule *po, void **ppObj)
{
   *ppObj = NULL;

   if( ClsId == AEECLSID_IFLIPAPP )
   {
	     // Create the applet and make room for the applet structure
 		   if( AEEApplet_New(sizeof(c_iflipapp), ClsId, pIShell, po, (IApplet**)ppObj, 
                            (AEEHANDLER)c_iflipapp_HandleEvent,
                            (PFNFREEAPPDATA)c_iflipapp_FreeAppData) ) 
                            // FreeAppData is called after sending EVT_APP_STOP to the 
                            // HandleEvent function.
                         
	     {
			      //Initialize applet data, this is called before sending EVT_APP_START to the 
         // HandleEvent function.
    			  if(c_iflipapp_InitAppData((c_iflipapp*)*ppObj))
      			{
   			     	//Data initialized successfully
        				return(AEE_SUCCESS);
      			}
      			else
      			{
         			//Release the applet, which frees memory allocated for the applet when 
            // AEEApplet_New was called.
         			IAPPLET_Release((IApplet*)*ppObj);
         			return EFAILED;
      			}

      } // end AEEApplet_New

   }

	  return(EFAILED);

}