Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

UpdateResource не обновляет ресурс

40K
23 октября 2008 года
maxio
9 / / 18.09.2008
гуттен шмуттен!

Вот в чём проблема. Имеется файл с зашитым в ресурсы файлом swf. Файл записывался в ресурсы с помощью такого Rc файла:

FLASH RCDATA movie.swf

В редакторе ресурсов (ResHack) видно в RCDATA раздел FLASH и там в поле 0 находятся эти данные. Тут всё ок. Но вот решил я написать прогу, которая позволит обновить этот swf в ресурсах файла. Вот непосредственно код:

Код:
HANDLE swfFileHandle = CreateFile(swfFile.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 if (swfFileHandle != INVALID_HANDLE_VALUE)
    {DWORD fileSize, bytesToRead;
     LPVOID swfBuffer;
     fileSize = GetFileSize(swfFileHandle, NULL);
     swfBuffer = new BYTE[fileSize];
     if (ReadFile(swfFileHandle, swfBuffer, fileSize, &bytesToRead, NULL))
        {HANDLE resFileHandle = BeginUpdateResource(scrFile.c_str(), FALSE);
         if (resFileHandle)
            {if (UpdateResource(resFileHandle, RT_RCDATA, "FLASH", MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPVOID) swfBuffer, fileSize))
                {
                 if (EndUpdateResource(resFileHandle, FALSE))
                     Label3->Caption = "Updated successfully!";
                 else Label3->Caption = "Error in EndUpdateResource";
                 }
             else Label3->Caption = "Error in UpdateResource";
             }
         else Label3->Caption = "Error in BeginUpdateResource";
         }
     else Label3->Caption = "Error while reading swf file";
     delete [] swfBuffer;
     CloseHandle(swfFileHandle);
     }
 else Label3->Caption = "Error when opeining swf file";


Всё проходит без ошибок, но ресурс не заменяет тот, что был раньше, а добавляется в файл как новый! Размер файла с ресурсами вырастает на размер movie.swf, в редакторе ресурсов становится видно в разделе RC_DATA -> FLASH два значения: 0 и 1024, каждый их которых содержит, соответственно, старый и новый файлы.

[ATTACH]3089[/ATTACH]

При этом, если я запускаю обновление ресурса ещё раз, теперь уже на новом файле, - размер больше не растёт, то есть он всё время обновляет этот FLASH с ID 1024, но никак не нулевой...
Знает ли кто-нибудь, как заставить с первого раза обновиться первоначальный SWF, а не записывать и обновлять дублированный?.. Или, может, как удалить ресурс? Читал в справке, что надо передать в UpdateResource lpData = NULL для удаления, но у меня это вызывает кокретный аксесс виолэйшн... :(
14
23 октября 2008 года
Phodopus
3.3K / / 19.06.2008
Делай
 
Код:
if (UpdateResource(resFileHandle, RT_RCDATA, "FLASH", MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), (LPVOID) swfBuffer, fileSize))
40K
24 октября 2008 года
maxio
9 / / 18.09.2008
Цитата: Phodopus
Делай
 
Код:
if (UpdateResource(resFileHandle,
 RT_RCDATA,
"FLASH",
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
(LPVOID) swfBuffer,
fileSize))



Ооо! Спасибо! Всё завелось!

Я так понял, те самые значения 0 и 1024 - это были метки языка для ресурса?

Спасибо, Phodopus! Отлично :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог