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";
UpdateResource не обновляет ресурс
Вот в чём проблема. Имеется файл с зашитым в ресурсы файлом swf. Файл записывался в ресурсы с помощью такого Rc файла:
FLASH RCDATA movie.swf
В редакторе ресурсов (ResHack) видно в RCDATA раздел FLASH и там в поле 0 находятся эти данные. Тут всё ок. Но вот решил я написать прогу, которая позволит обновить этот swf в ресурсах файла. Вот непосредственно код:
Код:
Всё проходит без ошибок, но ресурс не заменяет тот, что был раньше, а добавляется в файл как новый! Размер файла с ресурсами вырастает на размер movie.swf, в редакторе ресурсов становится видно в разделе RC_DATA -> FLASH два значения: 0 и 1024, каждый их которых содержит, соответственно, старый и новый файлы.
[ATTACH]3089[/ATTACH]
При этом, если я запускаю обновление ресурса ещё раз, теперь уже на новом файле, - размер больше не растёт, то есть он всё время обновляет этот FLASH с ID 1024, но никак не нулевой...
Знает ли кто-нибудь, как заставить с первого раза обновиться первоначальный SWF, а не записывать и обновлять дублированный?.. Или, может, как удалить ресурс? Читал в справке, что надо передать в UpdateResource lpData = NULL для удаления, но у меня это вызывает кокретный аксесс виолэйшн... :(
Код:
if (UpdateResource(resFileHandle, RT_RCDATA, "FLASH", MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), (LPVOID) swfBuffer, fileSize))
Цитата: Phodopus
Делай
Код:
if (UpdateResource(resFileHandle,
RT_RCDATA,
"FLASH",
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
(LPVOID) swfBuffer,
fileSize))
RT_RCDATA,
"FLASH",
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
(LPVOID) swfBuffer,
fileSize))
Ооо! Спасибо! Всё завелось!
Я так понял, те самые значения 0 и 1024 - это были метки языка для ресурса?
Спасибо, Phodopus! Отлично :)