Exemplo n.º 1
0
/*=============================================================================
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 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 is done in 
    IDisplay_FreeAppData().

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

PARAMETERS:
    clsID: [in]: Specifies the ClassID of the applet which is being loaded

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

    pIModule: pin]: Contains 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
   
   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 load.

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

    if( AEECLSID_C_SAMPLECAMERA == ClsId ) {
        // Create the applet and make room for the applet structure
	    if( TRUE == AEEApplet_New(sizeof(c_samplecamera),
                        ClsId,
                        pIShell,
                        po,
                        (IApplet**)ppObj,
                        (AEEHANDLER)c_samplecamera_HandleEvent,
                        (PFNFREEAPPDATA)c_samplecamera_FreeAppData) ) {
            // FreeAppData is called after sending EVT_APP_STOP to HandleEvent
                     		
            // Initialize applet data, this is called before sending 
            // EVT_APP_START to the HandleEvent function
		    if(TRUE == c_samplecamera_InitAppData(
				                            (c_samplecamera*)*ppObj)) {
	            // Data initialized successfully
			    return(AEE_SUCCESS);
		    }
		    else {
                // Release the applet. This will free the memory allocated for 
                // the applet when AEEApplet_New was called.
                IApplet_Release((IApplet*)*ppObj);
                return (EFAILED);
            }
        } // End AEEApplet_New
    }
    return(EFAILED);
}
Exemplo n.º 2
0
extern "C" int AEEClsCreateInstance(AEECLSID ClsId, IShell* piShell, IModule* piModule, void** ppApplet) {
	*ppApplet = NULL;
	AEEApplet* pMe = NULL;

    if (ClsId == AEECLSID_BREWAPP) {
	    if (AEEApplet_New(sizeof(BrewApp),
							ClsId,
							piShell, 
							piModule, 
							(IApplet**) ppApplet,
							(AEEHANDLER) BrewApp::HandleEvent,
							(PFNFREEAPPDATA) BrewApp::Destroy) ) {

			pMe = (AEEApplet*) (*ppApplet);
			if (pMe && BrewApp::Init((BrewApp*) pMe)) {
				return AEE_SUCCESS;
			}
			else if (pMe) {
                IApplet_Release((IApplet*)*ppApplet);
			}
		}
	}

    return(AEE_EFAILED);
}