ADD_APPLICATION_XX的差异--01

本文介绍了一组用于加载应用程序资源的宏定义,包括字符串、图片、音频等类型的资源加载方式。通过对宏定义的解析,展示了如何在代码中使用这些宏来实现资源的有效管理和加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#define ADD_APPLICATION_STRING(stringId, string)                            /
    RES_PRINT_INFO("ADD STRING/t(%s [%d]).../n", __FILE__, __LINE__);       /
    SetString(stringId, string, #stringId, __FILE__);                       /
    RES_PRINT_INFO("/tdone./n");
#define ADD_APPLICATION_STRING2(stringId, string, display)                  /
    RES_PRINT_INFO("ADD STRING2/t(%s [%d]).../n", __FILE__, __LINE__);      /
    SetStringWithDisplay(stringId, string, display, #stringId, __FILE__);   /
    RES_PRINT_INFO("/tdone./n");
#define ADD_APPLICATION_STRING3(stringId, tmp, string, display)             /
    RES_PRINT_INFO("ADD STRING3/t(%s [%d]).../n", __FILE__, __LINE__);      /
    SetStringWithDisplay(stringId, string, display, tmp, __FILE__);         /
    RES_PRINT_INFO("/tdone./n");

#define ADD_APPLICATION_IMAGE(ImageId, ImgFileName)                         /
    RES_PRINT_INFO("ADD IMAGE/t(%s [%d]).../n", __FILE__, __LINE__);        /
    SetImage(ImageId, ImgFileName, #ImageId, RES_IMAGE, __FILE__);          /
    RES_PRINT_INFO("/tdone./n");
#define ADD_APPLICATION_IMAGE2(ImageId, filename, display)                                  /
    RES_PRINT_INFO("ADD IMAGE2/t(%s [%d]).../n", __FILE__, __LINE__);                       /
    SetImageWithBuffer(ImageId, filename, display, #ImageId, RES_IMAGE, FALSE, __FILE__);   /
    RES_PRINT_INFO("/tdone./n");
#define ADD_APPLICATION_IMAGE3(ImageId, filename, display)                                  /
    RES_PRINT_INFO("ADD IMAGE3/t(%s [%d]).../n", __FILE__, __LINE__);                       /
    SetImageWithBuffer(ImageId, filename, display, #ImageId, RES_IMAGE, TRUE, __FILE__);    /
    RES_PRINT_INFO("/tdone./n");
#define ADD_APPLICATION_IMAGE4(ImageId, tmp, path, filename, display, isMB)                 /
    RES_PRINT_INFO("ADD IMAGE4/t(%s [%d]).../n", __FILE__, __LINE__);                       /
    {char fullpath[150]; sprintf(fullpath, "%s%s", path, filename);                         /
        SetImageWithBuffer(ImageId, fullpath, display, tmp, RES_IMAGE, isMB, __FILE__);}    /
    RES_PRINT_INFO("/tdone./n");
#define  ADD_NFB_IMAGE(args)                                                    /
    RES_PRINT_INFO("ADD NFB IMAGE/t(%s [%d]).../n", __FILE__, __LINE__);        /
    SetNFBImage(args);                                                          /
    RES_PRINT_INFO("/tdone./n");

#define ADD_APPLICATION_MEDIA(ImageId, ImgFileName)                         /
    RES_PRINT_INFO("ADD MEDIA/t(%s [%d]).../n", __FILE__, __LINE__);        /
    SetImage(ImageId,ImgFileName,#ImageId, RES_MEDIA, __FILE__);            /
    RES_PRINT_INFO("/tdone./n");
#define ADD_APPLICATION_MEDIA2(ImageId, filename, display)                                  /
    RES_PRINT_INFO("ADD MEDIA2/t(%s [%d]).../n", __FILE__, __LINE__);                       /
    SetImageWithBuffer(ImageId, filename, display, #ImageId, RES_MEDIA, FALSE, __FILE__);   /
    RES_PRINT_INFO("/tdone./n");
#define ADD_APPLICATION_MEDIA3(ImageId, filename, display)                                  /
    RES_PRINT_INFO("ADD MEDIA3/t(%s [%d]).../n", __FILE__, __LINE__);                       /
    SetImageWithBuffer(ImageId, filename, display, #ImageId, RES_MEDIA, TRUE, __FILE__);    /
    RES_PRINT_INFO("/tdone./n");
#define ADD_APPLICATION_MEDIA4(ImageId, tmp, path, filename, display, isMB)                 /
    RES_PRINT_INFO("ADD MEDIA4/t(%s [%d]).../n", __FILE__, __LINE__);                       /
    {char fullpath[150]; sprintf(fullpath, "%s%s", path, filename);                         /
        SetImageWithBuffer(ImageId, fullpath, display, tmp, RES_MEDIA, isMB, __FILE__);}    /
    RES_PRINT_INFO("/tdone./n");

#define ADD_APPLICATION_AUDIO2(AudioId, filename, display)                                  /
    RES_PRINT_INFO("ADD AUDIO2/t(%s [%d]).../n", __FILE__, __LINE__);                       /
    SetAudioWithBuffer(AudioId, filename, display, #AudioId, RES_AUDIO, FALSE, __FILE__);   /
    RES_PRINT_INFO("/tdone./n");
#define ADD_APPLICATION_AUDIO3(AudioId, filename, display)                                  /
    RES_PRINT_INFO("ADD AUDIO3/t(%s [%d]).../n", __FILE__, __LINE__);                       /
    SetAudioWithBuffer(AudioId, filename, display, #AudioId, RES_AUDIO, TRUE, __FILE__);    /
    RES_PRINT_INFO("/tdone./n");

#define ADD_APPLICATION_MENUITEM(args)                                      /
    RES_PRINT_INFO("ADD MENUITEM/t(%s [%d]).../n", __FILE__, __LINE__);     /
    SetMenuItem args;                                                       /
    strcpy(g_resmenu_filename, __FILE__);                                   /
    PrintMenuItems(#args);                                                  /
    RES_PRINT_INFO("/tdone./n");
#define ADD_APPLICATION_MENUITEM2(args)                                     /
    RES_PRINT_INFO("ADD MENUITEM2/t(%s [%d]).../n", __FILE__, __LINE__);    /
    SetMenuItem2 args;                                                      /
    strcpy(g_resmenu_filename, __FILE__);                                   /
    PrintMenuItems2(#args);                                                 /
    RES_PRINT_INFO("/tdone./n");

#define  ADD_APPLICATION(nId, pName, nMinId, nMaxId)    /
    AddApp(nId, pName, nMinId, nMaxId);

#define RESOURCE_ID_OUT_OF_RANGE_HANDLER()  /
    do {                                    /
        RES_PRINT_INFO("[ResGen error] Use more resource IDs than pre-defined range. (%s [%d])/n", __FILE__, __LINE__);    /
    } while (0)


#######################################################################

#define RES_PRINT_INFO(f, a...)     printf(f, ##a); fflush(stdout);

_CRTIMP int __cdecl printf (const char*, ...);
_CRTIMP int __cdecl fflush (FILE*);

#ifdef __MTK_TARGET__
#define printf                CAN_NOT_USE_PRINTF       
#endif

#######################################################################

void SetString(U16 StrId, S8 *String1, S8 *enum_value, S8 *resfile)
{
   
   
   

   
   
   
    SetStringWithDisplay(StrId, String1, String1, enum_value, resfile); 
}

void SetStringWithDisplay(U16 nStrId, S8 *pString1, S8 *pDisplay1, S8 *enum_value, S8 *resfile)
{
   
   
   
    S8 *pString = NULL;
    S8 *pEnum_value = NULL;

   
   
   
    g_ressize = 1;  //strlen(pString1);
#ifdef _POPULATE_RES_C
    if (strstr(pString1, "/n") == NULL)
    {
        RESPRTONERECORD(fpStringResourceUsage, nStrId, pString1, enum_value, resfile);
    }
    else
    {
        RESPRTONERECORD(fpStringResourceUsage, nStrId, "N/A", enum_value, resfile);
    }
#endif

    if (*pString1 == '/0')
    {
       
        pString = malloc(4);
        *pString = 20;
        *(pString + 1) = '/0';
        *(pString + 2) = '/0';
        *(pString + 3) = '/0';
    }
    else
    {
        pString = malloc((strlen(pString1) + 1) * 2);
        AnsiiToUnicodeString(pString, pString1);
    }

    pEnum_value = malloc((strlen(enum_value) + 1) * 2);
    AnsiiToUnicodeString(pEnum_value, enum_value);

   
    //      if(CurrMaxStringId >= MAX_STRING_IDS) return;  
    //      if (gpStringMapRes[nStrId]==(U16)-1)
    if (StrIsPopulate[nStrId] == 0)
    {
        CurrMaxStringId++;
        StrIsPopulate[nStrId] = 1;
        StrEnum[nStrId] = pEnum_value;
        Str[nStrId] = pString;
    }
    else   
    {
        fprintf(RepeatIDListFile, "%d/t%s/t/t%s/n", nStrId, enum_value, "String");
    }
}

#######################################################################

void SetImage(U16 ImgId, S8 *filename, S8 *enum_value, U32 res_type, S8 *resfile) 
{
   
   
   

   
   
   
    SetImageWithBuffer(ImgId, filename, "", enum_value, res_type, FALSE, resfile);      
}


void SetImageWithBuffer(U16 nImgId, S8 *filename, S8 *pDisplayName, S8 *enum_value, U32 res_type, BOOL imgFlag, S8 *resfile)     
{
   
   
   
    U16 i;
    U16 found = 0;
    S16 nStrlen;
    ResourceInfo sInfo;
    U16 nType;
    S8 upperFileName[MAX_FILENAME_LEN];
    unsigned short *pCurrMaxImageId;
    unsigned short *pCurrMaxImageNum;
    IMAGENAME_LIST *pImageNameList;
    CUSTOM_IMAGE_MAP *pImageIdMap;

   
   
   
    if (imgFlag == TRUE)
    {
        ExtImageFlag = EXT_IMAGE;
        pCurrMaxImageId = &CurrMaxImageIdEXT;
        pCurrMaxImageNum = &CurrMaxImageNumEXT;
        pImageNameList = ImageNameListEXT;
        pImageIdMap = ImageIdMapEXT;
    #ifdef __MMI_RESOURCE_ENFB_SUPPORT__
        #ifdef MULTIPLE_BINARY_FILES
        disableENFB = 1;
        #endif
    #endif
    }
    else
    {
        ExtImageFlag = SYSTEM_IMAGE;
        pCurrMaxImageId = &CurrMaxImageId;
        pCurrMaxImageNum = &CurrMaxImageNum;
        pImageNameList = ImageNameList;
        pImageIdMap = ImageIdMap;
    }

    if (*pCurrMaxImageId >= MAX_IMAGE_IDS_SIZE)
    {
        return;
    }

    fprintf(OutputImgIDFile, "file name%d = %s /n", image_idx++, filename);

    if (strlen(filename) >= MAX_FILENAME_LEN)
    {
        filename[MAX_FILENAME_LEN - 1] = '/0';
    }
    if (!(strcmp(filename, "")))
    {
        strcpy(filename_buffer, NOIMAGE_FILENAMEBUFFER);

    }
    nStrlen = strlen(filename);

    while (nStrlen >= 0)
    {
        upperFileName[nStrlen] = toupper(filename[nStrlen]);
        --nStrlen;
    }

    if (pImageIdMap[nImgId].nImageNum != (U16)-1)
    {
        switch (res_type)
        {
            case RES_IMAGE:
                fprintf(RepeatIDListFile, "%d/t%s/t/t%s/n", nImgId, enum_value, "Image");
                break;
            case RES_MEDIA:
                fprintf(RepeatIDListFile, "%d/t%s/t/t%s/n", nImgId, enum_value, "Media");
                break;
            default:
                printf("Non supported resource type!/n");
        }

        return;
    }

    for (i = 0; i < *pCurrMaxImageNum; i++)
    {
        if (!strcmp(pImageNameList[i].filename, upperFileName))
        {
            found = 1;
            break;
        }
    }

    g_ressize = 0;
    g_real_filename = filename;

    if (found)
    {
        pImageIdMap[nImgId].nImageNum = i;
        (*pCurrMaxImageId)++;
    #ifdef __MMI_RESOURCE_ENFB_SUPPORT__//100206 ENFB support
        if ((disableENFB == 0) && (ENFBAssociatedIDFlag == MMI_TRUE))
        {
            if (IfItemExistENFBAssociatedID(upperFileName, res_type))//already in other associated group
            {
                AddENFBAssociatedIDItem(nImgId, upperFileName, res_type);
            }
            else
            {
                fprintf(RepeatIDListFile, "/n/n!!!!!!!!!!!!%d/t%s/t/t%s!!!!!!!!!!!!!/n/n", nImgId, enum_value, upperFileName);
            }
        }
    #endif

#if defined(_POPULATE_RES_C) && !defined(PRODUCTION_RELEASE)
        {
            S8 str1[MAX_IMAGE_NAMES_SIZE];
            S8 str2[MAX_IMAGE_NAMES_SIZE];
            U32 i, j;

            strcpy(str1, filename);
            for (j = 0; j < strlen(str1); j++)
            {
                str1[j] = toupper(str1[j]);
            }
            for (i = 0; i < g_resimg_count; i++)
            {
                strcpy(str2, g_resimg_table[i].filename);
                for (j = 0; j < strlen(str1); j++)
                {
                    str2[j] = toupper(str2[j]);
                }
                if (strcmp(str1, str2) == 0)
                {
                    g_ressize = g_resimg_table[i].size;
                    g_real_filename = g_resimg_table[i].real_filename;
                    break;
                }
            }
        }
        RESPRTONERECORD(fpImageResourceUsage, nImgId, g_real_filename, enum_value, resfile);
#endif
    }
    else
    {
        if (Iload(upperFileName, &nType))
        {
            strcpy(pImageNameList[*pCurrMaxImageNum].filename, upperFileName);
            pImageIdMap[nImgId].nImageNum = *pCurrMaxImageNum;
            (*pCurrMaxImageNum)++;
            (*pCurrMaxImageId)++;
        #ifdef __MMI_RESOURCE_ENFB_SUPPORT__
            if ((disableENFB == 0) && (ENFBAssociatedIDFlag == MMI_TRUE))
            {
                if (ENFBAssociatedIDAdded == MMI_TRUE)//already in other associated group
                {
                    AddENFBAssociatedIDItem(nImgId, upperFileName, res_type);
                    ENFBAssociatedIDAdded = MMI_FALSE;
                }
            }
        #endif

#if defined(_POPULATE_RES_C) && !defined(PRODUCTION_RELEASE)
            g_resimg_table[g_resimg_count].size = g_ressize;
            strcpy(g_resimg_table[g_resimg_count].filename, filename);
            strcpy(g_resimg_table[g_resimg_count].real_filename, g_real_filename);
            g_resimg_count ++;
            RESPRTONERECORD(fpImageResourceUsage, nImgId, g_real_filename, enum_value, resfile);
#endif
        }
       
        else
        {
            if (toolFlag)
            {
                resultFailFlag = 1;
            }
            strcpy(ImageNameList[CurrMaxImageNum].filename, DEFAULT_FILEBUFFER);
            ImageIdMap[nImgId].nImageNum = CurrMaxImageNum;
            CurrMaxImageNum++;
            CurrMaxImageId++;
        }
    }
    sInfo.pDisplayValue = pDisplayName;
    sInfo.pValue = upperFileName;
#ifdef __MMI_RESOURCE_ENFB_SUPPORT__
    disableENFB = 0;
#endif
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值