⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cppapp.cpp

📁 一个内存受限系统内存分配的源代码。
💻 CPP
字号:
#include "cppapp.h"
#include "cppapp.bid"



#define TEST1						100
#define TEST2						101
#define TEST3						102
#define TEST4						103
#define TEST5						104
#define TEST6						105
#define TEST7						106




extern "C" 
int AEEClsCreateInstance(AEECLSID clsID, IShell* pIShell, IModule* pIModule, void **ppobj)
{
	if(clsID == AEECLSID_CPPAPP)
	{
		if(!AEEApplet_New(sizeof(CPPApp), clsID, pIShell, pIModule, (IApplet**)ppobj,(AEEHANDLER)CPPApp::HandleEvent,
			(PFNFREEAPPDATA)CPPApp::freeAppData))
			return EFAILED;
		if (!CPPApp::InitAppData((IApplet *)*ppobj))
			return EFAILED;
		return SUCCESS;
	}
	return EFAILED;
}

boolean  CPPApp::InitAppData(IApplet *pIApplet)
{
	CPPApp* pCPPApp = (CPPApp*)pIApplet;
	return pCPPApp->OnAppInitData();
}

void  CPPApp::freeAppData(CPPApp *pCPPApp)
{
	pCPPApp->OnAppfreeData();
}

boolean  CPPApp::HandleEvent(CPPApp *pCPPApp, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{   
	return pCPPApp->OnEvent(eCode, wParam, dwParam);
}


boolean CPPApp::OnAppInitData()
{
    m_pIMenuCtl = NULL;
	al_ = 0;
	getSingleton<Allocator>();
	th_ = new TempHeap;
    return TRUE;
}

void CPPApp::OnAppfreeData()
{
    if (m_pIMenuCtl)
        IMENUCTL_Release(m_pIMenuCtl);
	delete al_;
	delete th_;
}

boolean CPPApp::OnEvent(AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	switch (eCode) 
	{
	    case EVT_APP_START:			
			if(ISHELL_CreateInstance(m_pIShell, AEECLSID_MENUCTL, 
				  (void **)&m_pIMenuCtl) != SUCCESS)
				return TRUE;
			BuildMainMenu();
			return(TRUE);

	    case EVT_KEY:
            IMENUCTL_SetActive(m_pIMenuCtl, TRUE);
            if (wParam == AVK_CLR)
                return TRUE;
			else 
                return IMENUCTL_HandleEvent(m_pIMenuCtl, EVT_KEY, wParam, dwParam);
		
	    case EVT_COMMAND:
            switch(wParam)
			{
			    case TEST1:
                case TEST2:
			    case TEST3:
                case TEST4:
                case TEST5:
                case TEST6:
                case TEST7:
				   IMENUCTL_SetActive(m_pIMenuCtl, FALSE);
                   CPPUsage (wParam);
			       return TRUE;
			    default:
				    return FALSE;
			}
		
	    case EVT_APP_STOP:
		    return(TRUE);
			
		case EVT_APP_NO_SLEEP:
			return TRUE;
	    default:
		    return(FALSE);	   
	}
}

bool CPPApp::CPPUsage(uint16 wParam)
{

    switch (wParam)
    {
        case TEST1:
        {
            test1();
            break;
        }
        case TEST2:
        {
           test2();
            break;
        }

		case TEST3:
        {
           test3();
            break;
        }

		case TEST4:
        {
           test4();
            break;
        }

        default:
            return FALSE;
    }

    return TRUE;
}
				

void CPPApp::BuildMainMenu()
{
	AEERect qrc;
	AEEDeviceInfo di;
    AECHAR* szBuf;
    char* charBuf;
    if (m_pIShell == NULL || m_pIMenuCtl == NULL)
	   return;
    if ((szBuf = (AECHAR *) MALLOC(TEXT_BUFFER_SIZE)) == NULL)
	   return;
    if ((charBuf = (char *) MALLOC(TEXT_BUFFER_SIZE/sizeof(AECHAR))) == NULL)
    {
       FREE(szBuf);
	    return;
    }
    STRCPY(charBuf, "Examples");
    STR_TO_WSTR(charBuf, szBuf, TEXT_BUFFER_SIZE);
	IMENUCTL_SetTitle(m_pIMenuCtl, NULL, 0, szBuf);

	ISHELL_GetDeviceInfo(m_pIShell,&di);
	qrc.x = 0;
	qrc.y = 0;
	qrc.dx = di.cxScreen;
	qrc.dy = di.cyScreen;
	IMENUCTL_SetRect(m_pIMenuCtl, &qrc);  

    STRCPY(charBuf, "1. Test1");
    STR_TO_WSTR(charBuf, szBuf, TEXT_BUFFER_SIZE);
	IMENUCTL_AddItem(m_pIMenuCtl, 0, 0, TEST1, szBuf, 0);

    STRCPY(charBuf, "2. Test2");
    STR_TO_WSTR(charBuf, szBuf, TEXT_BUFFER_SIZE);
	IMENUCTL_AddItem(m_pIMenuCtl, 0, 0, TEST2, szBuf, 0);

	STRCPY(charBuf, "3. Test3");
    STR_TO_WSTR(charBuf, szBuf, TEXT_BUFFER_SIZE);
	IMENUCTL_AddItem(m_pIMenuCtl, 0, 0, TEST3, szBuf, 0);

	STRCPY(charBuf, "4. Test4");
    STR_TO_WSTR(charBuf, szBuf, TEXT_BUFFER_SIZE);
	IMENUCTL_AddItem(m_pIMenuCtl, 0, 0, TEST4, szBuf, 0);

	IMENUCTL_SetActive(m_pIMenuCtl,TRUE);

	FREE(szBuf);
    FREE(charBuf);

}


void CPPApp::test1()
{ 
	AutoPtr<Test> t0 (new Test(10));
	int val0 = t0->getValueAt(6);
    AutoPtr<AA> f0(new AA);
	AutoPtr<AA> g0 (10);
	int gs0 = g0[5].guess();
	Allocator* a = CPPApp::getSingleton<Allocator>();
	AutoPtr<Test> t (new(a) Test(10), a);
	int val = t->getValueAt(7); 
    AutoPtr<AA> f(new(a) AA, a);
	AutoPtr<AA> g (10, a);   
	int gs = g[8].guess();
	Writer writer;
	writer.WriteLine("Done");
}



void CPPApp::test2()
{ 
	Allocator* a = CPPApp::getSingleton<Allocator>();
    //AutoPtrPOD<AA> b (100, a ); //should fail
	AutoPtrPOD<TST> b (100, a );
	AutoPtrPOD<int> i (2, a );
	AutoPtrPOD<char> c (100, a );
	if (c)
	{
	STRCPY(c,"A VERY LONG STRING ALLOCATED FROM ALLOCATOR POOL");
	char ch  = c[5];
	}

	AutoPtrPOD<TST> b0 (100);
	AutoPtrPOD<int> i0 (2 );
	AutoPtrPOD<char> c0 (100);
	if (c0)
	{
	STRCPY(c0,"A VERY LONG STRING ALLOCATED FROM HEAP");
	char ch  = c0[5];
	}
	Writer writer;
	writer.WriteLine("Done");
}


void CPPApp::test3()
{ 
	Writer writer;
	writer.WriteLine("Unused");
}

void CPPApp::test4()
{ 
	Writer writer;
	writer.WriteLine("Unused");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -