Ignore:
Timestamp:
May 21, 2008, 1:16:21 PM (16 years ago)
Author:
dai_9181
Message:

ResourceManagerクラスを追加。既存のリソース管理モジュールの置き換えを行った。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/BasicCompiler_Common/RSrcSection.cpp

    r467 r622  
    6161
    6262    //カーソルリソース
    63     extern RESOURCEDATAINFO *pCursorResourceInfo;
    64     extern int CursorResourceNum;
    6563    int CursorNum;
    6664    CURSORDIR *pCursorDir;
     
    6967    CursorNum=0;
    7068
    71     //ビットマップリソース
    72     extern RESOURCEDATAINFO *pBitmapResourceInfo;
    73     extern int BitmapResourceNum;
    74 
    7569    //アイコンリソース
    76     extern RESOURCEDATAINFO *pIconResourceInfo;
    77     extern int IconResourceNum;
    7870    int IconNum;
    7971    ICONDIR *pIconDir;
     
    8274    IconNum=0;
    8375
    84     //XPManifestリソース
    85     extern char szManifestPath[MAX_PATH];
    86     extern int XPManiResourceNum;
    87 
    8876    BufSize=8192*2;
    8977    buffer=(char *)HeapAlloc(hHeap,0,BufSize);
     
    9785    *pLen=0;
    9886
    99     if(CursorResourceNum==0&&
    100         BitmapResourceNum==0&&
    101         IconResourceNum==0&&
    102         XPManiResourceNum==0) return buffer;
     87    if( compiler.resourceManager.cursorResources.empty()
     88        && compiler.resourceManager.bitmapResources.empty()
     89        && compiler.resourceManager.iconResources.empty()
     90        && compiler.resourceManager.manifestFilePath.empty() )
     91    {
     92        return buffer;
     93    }
    10394
    10495    sw=0;
    10596
    10697    //カーソルの枚数を計算(CursorNumに格納)
    107     for(i3=0;i3<CursorResourceNum;i3++){
    108         hFile=CreateFile(pCursorResourceInfo[i3].FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
     98    for(i3=0;i3<compiler.resourceManager.cursorResources.size();i3++){
     99        hFile=CreateFile(compiler.resourceManager.cursorResources[i3].filepath.c_str(),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    109100        if(hFile==INVALID_HANDLE_VALUE){
    110             compiler.errorMessenger.Output(23,pCursorResourceInfo[i3].FileName,-1);
     101            compiler.errorMessenger.Output(23,compiler.resourceManager.cursorResources[i3].filepath.c_str(),-1);
    111102            sw=1;
    112103            continue;
     
    124115
    125116    //ビットマップのファイルの有無を確認
    126     for(i3=0;i3<BitmapResourceNum;i3++){
    127         hFile=CreateFile(pBitmapResourceInfo[i3].FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
     117    for(i3=0;i3<compiler.resourceManager.bitmapResources.size();i3++){
     118        hFile=CreateFile(compiler.resourceManager.bitmapResources[i3].filepath.c_str(),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    128119        if(hFile==INVALID_HANDLE_VALUE){
    129             compiler.errorMessenger.Output(23,pBitmapResourceInfo[i3].FileName,-1);
     120            compiler.errorMessenger.Output(23,compiler.resourceManager.bitmapResources[i3].filepath.c_str(),-1);
    130121            sw=1;
    131122            continue;
     
    135126
    136127    //アイコンの枚数を計算(IconNumに格納)
    137     for(i3=0;i3<IconResourceNum;i3++){
    138         hFile=CreateFile(pIconResourceInfo[i3].FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
     128    for(i3=0;i3<compiler.resourceManager.iconResources.size();i3++){
     129        hFile=CreateFile(compiler.resourceManager.iconResources[i3].filepath.c_str(),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    139130        if(hFile==INVALID_HANDLE_VALUE){
    140             compiler.errorMessenger.Output(23,pIconResourceInfo[i3].FileName,-1);
     131            compiler.errorMessenger.Output(23,compiler.resourceManager.iconResources[i3].filepath.c_str(),-1);
    141132            sw=1;
    142133            continue;
     
    161152    /////////////////////////
    162153    TypeNum=0;
    163     if(CursorResourceNum) TypeNum+=2;
    164     if(BitmapResourceNum) TypeNum++;
    165     if(IconResourceNum) TypeNum+=2;
    166     if(XPManiResourceNum) TypeNum++;
     154    if( !compiler.resourceManager.cursorResources.empty() ) TypeNum+=2;
     155    if( !compiler.resourceManager.bitmapResources.empty() ) TypeNum++;
     156    if( !compiler.resourceManager.iconResources.empty() ) TypeNum+=2;
     157    if( !compiler.resourceManager.manifestFilePath.empty() ) TypeNum++;
    167158
    168159    NextBase=sizeof(IMAGE_RESOURCE_DIRECTORY)+
     
    193184                sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)*CursorNum;
    194185    }
    195     if(BitmapResourceNum){
     186    if( !compiler.resourceManager.bitmapResources.empty() ){
    196187        //RT_BITMAP
    197188        ImgDirEntry.Name=(DWORD)(LONG_PTR)RT_BITMAP;
     
    202193        //2階層のサイズ
    203194        i6+=    sizeof(IMAGE_RESOURCE_DIRECTORY)+
    204                 sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)*BitmapResourceNum;
     195                sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY) * compiler.resourceManager.bitmapResources.size();
    205196    }
    206197    if(IconNum){
     
    215206                sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)*IconNum;
    216207    }
    217     if(CursorResourceNum){
     208    if( !compiler.resourceManager.cursorResources.empty() )
     209    {
    218210        //RT_GROUP_CURSOR
    219211        ImgDirEntry.Name=(DWORD)(LONG_PTR)RT_GROUP_CURSOR;
     
    226218                sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)*CursorNum;
    227219    }
    228     if(IconResourceNum){
     220    if( !compiler.resourceManager.iconResources.empty() )
     221    {
    229222        //RT_GROUP_ICON
    230223        ImgDirEntry.Name=(DWORD)(LONG_PTR)RT_GROUP_ICON;
     
    235228        //2階層のサイズ
    236229        i6+=    sizeof(IMAGE_RESOURCE_DIRECTORY)+
    237                 sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)*IconResourceNum;
    238     }
    239     if(XPManiResourceNum){
     230                sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY) * compiler.resourceManager.iconResources.size();
     231    }
     232    if( !compiler.resourceManager.manifestFilePath.empty() )
     233    {
    240234        //RT_MANIFEST
    241235        ImgDirEntry.Name=(DWORD)(LONG_PTR)RT_MANIFEST;
     
    246240        //2階層のサイズ
    247241        i6+=    sizeof(IMAGE_RESOURCE_DIRECTORY)+
    248                 sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)*XPManiResourceNum;
     242                sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY) * 1/*XPManiResourceNum*/ ;
    249243    }
    250244
     
    279273            sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY))*CursorNum;
    280274    }
    281     if(BitmapResourceNum){
     275    if( !compiler.resourceManager.bitmapResources.empty() ){
    282276        //RT_BITMAP
    283277        ImgResDir.Characteristics=0;
     
    286280        ImgResDir.MinorVersion=0;
    287281        ImgResDir.NumberOfNamedEntries=0;
    288         ImgResDir.NumberOfIdEntries=BitmapResourceNum;
     282        ImgResDir.NumberOfIdEntries = compiler.resourceManager.bitmapResources.size();
    289283        memcpy(buffer+i2,&ImgResDir,sizeof(IMAGE_RESOURCE_DIRECTORY));
    290284        i2+=sizeof(IMAGE_RESOURCE_DIRECTORY);
    291285
    292         for(i3=0;i3<BitmapResourceNum;i3++){
    293             ImgDirEntry.Name=pBitmapResourceInfo[i3].dwId;
     286        for(i3=0;i3<compiler.resourceManager.bitmapResources.size();i3++)
     287        {
     288            ImgDirEntry.Name = compiler.GetObjectModule().meta.GetGlobalConsts().GetWholeData(
     289                ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol(
     290                    compiler.resourceManager.bitmapResources[i3].idName
     291                )
     292            );
    294293            ImgDirEntry.OffsetToData=(NextBase+i6+
    295294                (sizeof(IMAGE_RESOURCE_DIRECTORY)+
     
    301300
    302301        i6+=(sizeof(IMAGE_RESOURCE_DIRECTORY)+
    303             sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY))*BitmapResourceNum;
     302            sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)) * compiler.resourceManager.bitmapResources.size();
    304303    }
    305304    if(IconNum){
     
    328327            sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY))*IconNum;
    329328    }
    330     if(CursorResourceNum){
     329    if( !compiler.resourceManager.cursorResources.empty() )
     330    {
    331331        //RT_GROUP_CURSOR
    332332        ImgResDir.Characteristics=0;
     
    335335        ImgResDir.MinorVersion=0;
    336336        ImgResDir.NumberOfNamedEntries=0;
    337         ImgResDir.NumberOfIdEntries=CursorResourceNum;
     337        ImgResDir.NumberOfIdEntries = compiler.resourceManager.cursorResources.size();
    338338        memcpy(buffer+i2,&ImgResDir,sizeof(IMAGE_RESOURCE_DIRECTORY));
    339339        i2+=sizeof(IMAGE_RESOURCE_DIRECTORY);
    340340
    341         for(i3=0;i3<CursorResourceNum;i3++){
    342             ImgDirEntry.Name=pCursorResourceInfo[i3].dwId;
     341        for(i3=0;i3<compiler.resourceManager.cursorResources.size();i3++){
     342            ImgDirEntry.Name = compiler.GetObjectModule().meta.GetGlobalConsts().GetWholeData(
     343                ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol(
     344                    compiler.resourceManager.cursorResources[i3].idName
     345                )
     346            );
    343347            ImgDirEntry.OffsetToData=(NextBase+i6+
    344348                (sizeof(IMAGE_RESOURCE_DIRECTORY)+
     
    351355        //3階層のサイズ
    352356        i6+=(sizeof(IMAGE_RESOURCE_DIRECTORY)+
    353             sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY))*CursorResourceNum;
    354     }
    355     if(IconResourceNum){
     357            sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)) * compiler.resourceManager.cursorResources.size();
     358    }
     359    if( !compiler.resourceManager.iconResources.empty() )
     360    {
    356361        //RT_GROUP_ICON
    357362        ImgResDir.Characteristics=0;
     
    360365        ImgResDir.MinorVersion=0;
    361366        ImgResDir.NumberOfNamedEntries=0;
    362         ImgResDir.NumberOfIdEntries=IconResourceNum;
     367        ImgResDir.NumberOfIdEntries = compiler.resourceManager.iconResources.size();
    363368        memcpy(buffer+i2,&ImgResDir,sizeof(IMAGE_RESOURCE_DIRECTORY));
    364369        i2+=sizeof(IMAGE_RESOURCE_DIRECTORY);
    365370
    366         for(i3=0;i3<IconResourceNum;i3++){
    367             ImgDirEntry.Name=pIconResourceInfo[i3].dwId;
     371        for(i3=0;i3<compiler.resourceManager.iconResources.size();i3++){
     372            ImgDirEntry.Name = compiler.GetObjectModule().meta.GetGlobalConsts().GetWholeData(
     373                ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol(
     374                    compiler.resourceManager.iconResources[i3].idName
     375                )
     376            );
    368377            ImgDirEntry.OffsetToData=(NextBase+i6+
    369378                (sizeof(IMAGE_RESOURCE_DIRECTORY)+
     
    376385        //3階層のサイズ
    377386        i6+=(sizeof(IMAGE_RESOURCE_DIRECTORY)+
    378             sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY))*IconResourceNum;
    379     }
    380     if(XPManiResourceNum){
     387            sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)) * compiler.resourceManager.iconResources.size();
     388    }
     389    if( !compiler.resourceManager.manifestFilePath.empty() )
     390    {
    381391        //RT_MANIFEST
    382392        ImgResDir.Characteristics=0;
     
    385395        ImgResDir.MinorVersion=0;
    386396        ImgResDir.NumberOfNamedEntries=0;
    387         ImgResDir.NumberOfIdEntries=XPManiResourceNum;
     397        ImgResDir.NumberOfIdEntries = 1 /*XPManiResourceNum*/ ;
    388398        memcpy(buffer+i2,&ImgResDir,sizeof(IMAGE_RESOURCE_DIRECTORY));
    389399        i2+=sizeof(IMAGE_RESOURCE_DIRECTORY);
    390400
    391         for(i3=0;i3<XPManiResourceNum;i3++){
     401        i3 = 0;
     402        {
    392403            ImgDirEntry.Name=i3+1;
    393404            ImgDirEntry.OffsetToData=(NextBase+i6+
     
    400411
    401412        i6+=(sizeof(IMAGE_RESOURCE_DIRECTORY)+
    402             sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY))*XPManiResourceNum;
     413            sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)) * 1 /*XPManiResourceNum*/ ;
    403414    }
    404415
     
    434445        i6+=sizeof(IMAGE_RESOURCE_DATA_ENTRY)*CursorNum;
    435446    }
    436     if(BitmapResourceNum){
     447    if( !compiler.resourceManager.bitmapResources.empty() ){
    437448        //RT_BITMAP
    438         for(i3=0;i3<BitmapResourceNum;i3++){
     449        for(i3=0;i3<compiler.resourceManager.bitmapResources.size();i3++){
    439450            ImgResDir.Characteristics=0;
    440451            ImgResDir.TimeDateStamp=0;
     
    453464        }
    454465
    455         i6+=sizeof(IMAGE_RESOURCE_DATA_ENTRY)*BitmapResourceNum;
     466        i6+=sizeof(IMAGE_RESOURCE_DATA_ENTRY) * compiler.resourceManager.bitmapResources.size();
    456467    }
    457468    if(IconNum){
     
    476487        i6+=sizeof(IMAGE_RESOURCE_DATA_ENTRY)*IconNum;
    477488    }
    478     if(CursorResourceNum){
     489    if( !compiler.resourceManager.cursorResources.empty() )
     490    {
    479491        //RT_GROUP_CURSOR
    480         for(i3=0;i3<CursorResourceNum;i3++){
     492        for(i3=0;i3<compiler.resourceManager.cursorResources.size();i3++){
    481493            ImgResDir.Characteristics=0;
    482494            ImgResDir.TimeDateStamp=0;
     
    495507        }
    496508
    497         i6+=sizeof(IMAGE_RESOURCE_DATA_ENTRY)*CursorResourceNum;
    498     }
    499     if(IconResourceNum){
     509        i6+=sizeof(IMAGE_RESOURCE_DATA_ENTRY) * compiler.resourceManager.cursorResources.size();
     510    }
     511    if( !compiler.resourceManager.iconResources.empty() )
     512    {
    500513        //RT_GROUP_ICON
    501         for(i3=0;i3<IconResourceNum;i3++){
     514        for(i3=0;i3<compiler.resourceManager.iconResources.size();i3++){
    502515            ImgResDir.Characteristics=0;
    503516            ImgResDir.TimeDateStamp=0;
     
    516529        }
    517530
    518         i6+=sizeof(IMAGE_RESOURCE_DATA_ENTRY)*IconResourceNum;
    519     }
    520     if(XPManiResourceNum){
     531        i6+=sizeof(IMAGE_RESOURCE_DATA_ENTRY)*compiler.resourceManager.iconResources.size();
     532    }
     533    if( !compiler.resourceManager.manifestFilePath.empty() ){
    521534        //RT_MANIFEST
    522         for(i3=0;i3<XPManiResourceNum;i3++){
     535        i3 = 0;
     536        {
    523537            ImgResDir.Characteristics=0;
    524538            ImgResDir.TimeDateStamp=0;
     
    537551        }
    538552
    539         i6+=sizeof(IMAGE_RESOURCE_DATA_ENTRY)*XPManiResourceNum;
     553        i6+=sizeof(IMAGE_RESOURCE_DATA_ENTRY) * 1 /*XPManiResourceNum*/ ;
    540554    }
    541555
     
    576590    //RT_BITMAP
    577591    BitmapEntryBase=DataEntryScheduleNum;
    578     for(i3=0;i3<BitmapResourceNum;i3++){
     592    for(i3=0;i3<compiler.resourceManager.bitmapResources.size();i3++){
    579593        dwDataEntrySchedule[DataEntryScheduleNum]=i2;
    580594        DataEntryScheduleNum++;
     
    594608    //RT_GROUP_CURSOR
    595609    CursorGroupEntryBase=DataEntryScheduleNum;
    596     for(i3=0;i3<CursorResourceNum;i3++){
     610    for(i3=0;i3<compiler.resourceManager.cursorResources.size();i3++){
    597611        dwDataEntrySchedule[DataEntryScheduleNum]=i2;
    598612        DataEntryScheduleNum++;
     
    603617    //RT_GROUP_ICON
    604618    IconGroupEntryBase=DataEntryScheduleNum;
    605     for(i3=0;i3<IconResourceNum;i3++){
     619    for(i3=0;i3<compiler.resourceManager.iconResources.size();i3++){
    606620        dwDataEntrySchedule[DataEntryScheduleNum]=i2;
    607621        DataEntryScheduleNum++;
     
    613627    int XPManiEntryBase;
    614628    XPManiEntryBase=DataEntryScheduleNum;
    615     for(i3=0;i3<XPManiResourceNum;i3++){
     629    i3 = 0;
     630    {
    616631        dwDataEntrySchedule[DataEntryScheduleNum]=i2;
    617632        DataEntryScheduleNum++;
     
    642657
    643658    //カーソルリソース
    644     for(i3=0,i6=0;i3<CursorResourceNum;i3++){
    645         hFile=CreateFile(pCursorResourceInfo[i3].FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
     659    for(i3=0,i6=0;i3<compiler.resourceManager.cursorResources.size();i3++){
     660        hFile=CreateFile(compiler.resourceManager.cursorResources[i3].filepath.c_str(),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    646661        if(hFile==INVALID_HANDLE_VALUE){
    647             compiler.errorMessenger.Output(23,pCursorResourceInfo[i3].FileName,-1);
     662            compiler.errorMessenger.Output(23,compiler.resourceManager.cursorResources[i3].filepath.c_str(),-1);
    648663            return buffer;
    649664        }
     
    722737
    723738    //ビットマップリソース
    724     for(i3=0;i3<BitmapResourceNum;i3++){
    725         hFile=CreateFile(pBitmapResourceInfo[i3].FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
     739    for(i3=0;i3<compiler.resourceManager.bitmapResources.size();i3++){
     740        hFile=CreateFile(compiler.resourceManager.bitmapResources[i3].filepath.c_str(),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    726741        if(hFile==INVALID_HANDLE_VALUE){
    727             compiler.errorMessenger.Output(23,pBitmapResourceInfo[i3].FileName,-1);
     742            compiler.errorMessenger.Output(23,compiler.resourceManager.bitmapResources[i3].filepath.c_str(),-1);
    728743            return buffer;
    729744        }
     
    750765
    751766    //アイコンリソース
    752     for(i3=0,i6=0;i3<IconResourceNum;i3++){
    753         hFile=CreateFile(pIconResourceInfo[i3].FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
     767    for(i3=0,i6=0;i3<compiler.resourceManager.iconResources.size();i3++){
     768        hFile=CreateFile(compiler.resourceManager.iconResources[i3].filepath.c_str(),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    754769        if(hFile==INVALID_HANDLE_VALUE){
    755             compiler.errorMessenger.Output(23,pIconResourceInfo[i3].FileName,-1);
     770            compiler.errorMessenger.Output(23,compiler.resourceManager.iconResources[i3].filepath.c_str(),-1);
    756771            return buffer;
    757772        }
     
    831846
    832847    //XPManifestリソース
    833     for(i3=0;i3<XPManiResourceNum;i3++){
    834         extern char BasicCurDir[MAX_PATH];
    835         extern char szManifestPath[MAX_PATH];
    836         char temp2[MAX_PATH];
    837         lstrcpy(temp2,szManifestPath);
    838         GetFullPath(temp2,BasicCurDir);
    839         hFile=CreateFile(temp2,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
     848    i3 = 0;
     849    if( !compiler.resourceManager.manifestFilePath.empty() )
     850    {
     851        hFile=CreateFile(compiler.resourceManager.manifestFilePath.c_str(),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    840852        if(hFile==INVALID_HANDLE_VALUE){
    841             compiler.errorMessenger.Output(59,temp2,-1);
     853            compiler.errorMessenger.Output(59,compiler.resourceManager.manifestFilePath.c_str(),-1);
    842854            return buffer;
    843855        }
     
    857869        //アプリケーション名をセット
    858870        char szAppliName[MAX_PATH];
     871        char temp2[MAX_PATH];
    859872        _splitpath( program.GetOutputFilePath().c_str(),NULL,NULL,szAppliName,temp2);
    860873        lstrcat(szAppliName,temp2);
Note: See TracChangeset for help on using the changeset viewer.