Делаю win32 проект в MSVS добавляю в ресурсы файл. Пишу в rc файле проекта так: Код (Text): RCFILE RT_RCDATA "file.exe" Компилю пустой проект только в rc фале вот запись та что я написал. Переименовываю готовый exe в del.exe Делаю консольное приложение туда сую такой код: Код (Text): #include <windows.h> int main(int argc,char* argv[]) { HANDLE hUpdateRes; hUpdateRes = BeginUpdateResource("del.exe", false); UpdateResource(hUpdateRes, RT_RCDATA, "RCFILE",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US), NULL, NULL); EndUpdateResource(hUpdateRes, false); return 0; } Хочу удалить из del.exe тот файл что я засунул ему в ресурсы с помощью этого консольного приложени, а они не удаляются. Пробовал и юникод и анси варианты кода и всё равно не удаляет из ресурсов ничего но дата фала меняется и у del.exe то есть ресурсы то апдейтятся как бы но как тот файл что я засунул был в ресурсах так и есть. Код вроде правильный а не пашет почему то. Кто что посоветует?
Ух ты ё помогло Спасибки Great но только удаляет со второго раза почему то Код (Text): #include <windows.h> int main(int argc,char* argv[]) { HANDLE hUpdateRes; hUpdateRes = BeginUpdateResource("del.exe", false); UpdateResource(hUpdateRes,MAKEINTRESOURCE(1), NULL,MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US), NULL, NULL); EndUpdateResource(hUpdateRes, false); return 0; } Хм странно... Сейчас заметил что и тот код который я пидал в первом посте тоже удаляет ресурсы но только со 2-го раза. Через GetLastError() пишет что "Неправильно задан параметр". То есть вызов я ставит если UpdateResource возвратит 0 и на первый и на второй раз ругается что "Неправильно задан параметр" но на второй наз удаляет ресурсы. Чёт и отладчик не натолкнул меня на мысль почему так происходит. Может кто сталкивался?
Ага я уже разобрался вот как раз зашёл отписать и код кинуть может кому да пригодится Код (Text): BOOL WINAPI DeleteResource(char* UpdateFile, char *ResType, char *ResName) { HANDLE hUpdateRes; hUpdateRes = BeginUpdateResource(UpdateFile, true); UpdateResource(hUpdateRes,ResType,ResName, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), NULL, NULL); EndUpdateResource(hUpdateRes, false); return TRUE; }
perdimonokl я уже разобрался ... код ... может кому да пригодится Сомневаюсь. Если ты хотел удалить _все_ ресурсы из файла, то достаточно было вызвать две функции Код (Text): ... if (NULL != (hRes = BeginUpdateResource(lpFileName, TRUE))) EndUpdateResource(hRes, FALSE); ... Если ты хотел удалить определенный ресурс, то твой код не учитывает, что удаляемый ресурс может принадлежать языку отличному от MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), и не понятно почему второй параметр BeginUpdateResource - true.
q_q Ты же мне сам сказал поставить в BeginUpdateResource второй параметр в true чё ты удивляешься то? А удалить я хотел определённый ресурс а не все А если чтото не так то ты просто поправь код и всё да клади я пойму
perdimonokl Ты же мне сам сказал поставить в BeginUpdateResource второй параметр в true Ты что-то путаешь, по поводу второго параметра см. #2.
появилась аналогичная проблема. Код (Text): LANG_NEUTRAL = 0 SUBLANG_DEFAULT = 1 BeginUpdateResource('C:\3.exe',FALSE) mov edi,eax mov ecx,SUBLANG_DEFAULT shl ecx,10 mov cl,LANG_NEUTRAL UpdateResource(edi,RT_GROUP_ICON,17,ecx,0,0) .if eax EndUpdateResource(edi,FALSE) .else EndUpdateResource(edi,TRUE) .endif UpdateResource возвращает ERROR_INVALID_PARAMETR. Ид ресурса 17 открывал смотрел. edi - хэндл, тоже нормально. последнии два параметра тоже правильны, для удаления оба должны быть нули. Почему не работает, не могу понять. ecx - 400h получаеться, вроде так и должно быть. может знает кто?
подскажите, может кто знает. секцея ресурсов в файле предпоследняя, изменяя её(UpdateResource), стала не доступной последняя сейции, т.к. смещения то изменились. то есть она то доступна, но смещения барахлят. как с этим бороться?