📄 aeegen.c
字号:
//======================================================
//颇老: aeegen.h
//
//林力: 葛碘苞 览侩橇肺弊伐 角青券版 包府 颇老
//
//汲疙:
// 葛碘 棺 局敲复 备炼眉甫 扁馆栏肺 荤侩磊 裹困狼 览侩橇肺弊伐
// 角青 券版 包府 窃荐 备泅
//
//累己磊:
// 2006.02. 冠蛮刮(eacs@paran.com)
//===== =================================================
#include "std.h"
#include "App.h"
//AEEModole 檬扁拳
static uint32 AEEMod_AddRef(IModule *po);
static uint32 AEEMod_Release(IModule *po);
static int AEEMod_CreateInstance(IModule *po,IShell *pIShell,AEECLSID ClsId, void **ppObj);
static void AEEMod_FreeResources(IModule *po, IHeap *ph, IFileMgr *pfm);
#ifdef AEE_SIMULATOR
AEEHelperFuncs *g_pvtAEEStdLibEntry;
#endif
#ifdef AEE_SIMULATOR
__declspec(dllexport) int AEEMod_Load(IShell *pIShell, void *ph, IModule **ppMod)
#else
#if defined(BREW_MODULE) || defined(FLAT_BREW)
extern int module_main(IShell *pIShell, void *ph, IModule **ppMod);
int module_main(IShell *pIShell, void *ph, IModule **ppMod)
#else
int AEEMod_Load(IShell *pIShell, void *ph, IModule **ppMod)
#endif
#endif
{
return AEEStaticMod_New(sizeof(AEEMod),pIShell,ph,ppMod,NULL,NULL);
}
int AEEStaticMod_New(int16 nSize, IShell *pIShell, void *ph, IModule **ppMod,PFNMODCREATEINST pfnMC,PFNFREEMODDATA pfnMF)
{
AEEMod *pMe = NULL;
VTBL(IModule) *modFuncs;
if (!ppMod || !pIShell) {
return EFAILED;
}
if (nSize < 0) {
return EBADPARM;
}
*ppMod = NULL;
#ifdef AEE_SIMULATOR
if (!ph) {
return EFAILED;
} else {
g_pvtAEEStdLibEntry = (AEEHelperFuncs *)ph;
}
#endif
if (nSize < sizeof(AEEMod)) {
nSize += sizeof(AEEMod);
}
if (NULL == (pMe = (AEEMod *)MALLOC(nSize + sizeof(IModuleVtbl)))) {
return ENOMEMORY;
}
modFuncs = (IModuleVtbl *)((byte *)pMe + nSize);
modFuncs->AddRef = AEEMod_AddRef;
modFuncs->Release = AEEMod_Release;
modFuncs->CreateInstance = AEEMod_CreateInstance;
modFuncs->FreeResources = AEEMod_FreeResources;
INIT_VTBL(pMe, IModule, *modFuncs);
pMe->pfnModCrInst = pfnMC;
pMe->pfnModFreeData = pfnMF;
pMe->m_nRefs = 1;
pMe->m_pIShell = pIShell;
ISHELL_AddRef(pIShell);
*ppMod = (IModule*)pMe;
return SUCCESS;
}
static uint32 AEEMod_AddRef(IModule *po)
{
return (++((AEEMod *)po)->m_nRefs);
}
static uint32 AEEMod_Release(IModule *po)
{
AEEMod *pMe = (AEEMod *)po;
if (--pMe->m_nRefs != 0) {
return pMe->m_nRefs;
}
if (pMe->pfnModFreeData) {
pMe->pfnModFreeData(po);
}
if (pMe->m_pIShell) {
ISHELL_Release(pMe->m_pIShell);
pMe->m_pIShell = NULL;
}
FREE_VTBL(pMe, IModule);
FREE(pMe);
return 0;
}
static int AEEMod_CreateInstance(IModule *pIModule,IShell *pIShell,
AEECLSID ClsId,void **ppObj)
{
AEEMod *pMe = (AEEMod *)pIModule;
int nRet = EFAILED;
if (pMe->pfnModCrInst)
{
nRet = pMe->pfnModCrInst(ClsId, pIShell, pIModule, ppObj);
#if !defined(AEE_STATIC)
}
else
{
nRet = AEEClsCreateInstance(ClsId, pIShell, pIModule, ppObj);
#endif
}
return nRet;
}
static void AEEMod_FreeResources(IModule *po, IHeap *ph, IFileMgr *pfm)
{
(void)po,(void)ph,(void)pfm; /* 荤侩登瘤 臼澜. */
}
//AEEApplet 檬扁拳
static uint32 AEEApplet_AddRef(IApplet * po);
static uint32 AEEApplet_Release(IApplet * po);
static boolean AEEApplet_HandleEvent(IApplet * po, AEEEvent evt,
uint16 wParam, uint32 dwParam);
static uint32 AEEApplet_AddRef(IApplet * po)
{
return ++(((AEEApplet *)po)->m_nRefs);
}
static uint32 AEEApplet_Release(IApplet * po)
{
IShell * pIShell = NULL;
AEEApplet * pMe = (AEEApplet *)po;
if (--pMe->m_nRefs)
return(pMe->m_nRefs);
if(pMe->pFreeAppData)
pMe->pFreeAppData(po);
if (pMe->m_pIDisplay)
IDISPLAY_Release(pMe->m_pIDisplay);
IMODULE_Release(pMe->m_pIModule);
pIShell = pMe->m_pIShell;
FREE_VTBL(pMe, IApplet);
FREE(pMe);
ISHELL_Release(pIShell); //僵 力芭
return 0;
}
boolean AEEApplet_HandleEvent(IApplet * po, AEEEvent evt, uint16 wParam,uint32 dwParam)
{
return ((AEEApplet *)po)->pAppHandleEvent(po, evt,wParam,dwParam);
}
boolean AEEApplet_New(int16 nIn,
AEECLSID clsID,
IShell * pIShell,
IModule * pIModule,
IApplet **ppobj,
AEEHANDLER pAppHandleEvent,
PFNFREEAPPDATA pFreeAppData)
{
AEEApplet * pMe = NULL;
VTBL(IApplet) * appFuncs;
int nSize;
if(nIn < 0)
return(FALSE);
nSize = (int)nIn;
if(!ppobj)
return(FALSE);
*ppobj = NULL;
if (!pIShell || !pIModule)
return FALSE;
if(nSize < sizeof(AEEApplet))
nSize += sizeof(AEEApplet);
if (NULL == (pMe = (AEEApplet*)MALLOC(nSize + sizeof(IAppletVtbl))))
return FALSE;
appFuncs = (IAppletVtbl *)((byte *)pMe + nSize);
appFuncs->AddRef = AEEApplet_AddRef;
appFuncs->Release = AEEApplet_Release;
appFuncs->HandleEvent = AEEApplet_HandleEvent;
INIT_VTBL(pMe, IApplet, *appFuncs); //VTBL 檬扁拳
pMe->m_nRefs = 1;
pMe->m_pIShell = pIShell;
pMe->m_pIModule = pIModule;
pMe->m_pIDisplay = NULL;
pMe->clsID = clsID;
pMe->pAppHandleEvent = pAppHandleEvent;
pMe->pFreeAppData = pFreeAppData;
ISHELL_CreateInstance(pIShell, AEECLSID_DISPLAY,
(void **)&pMe->m_pIDisplay);
if (!pMe->m_pIDisplay)
{
FREE_VTBL(pMe, IApplet);
FREE(pMe);
return FALSE;
}
ISHELL_AddRef(pIShell);
IMODULE_AddRef(pIModule);
*ppobj = (IApplet*)pMe;
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -