![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - UpdateResource делает .exe некорректным |
|
Win32 API - UpdateResource делает .exe некорректным
|
Пользователь Сообщения: 57 |
Здравствуйте. Понадобилось записать ресурсы, необходимые для работы приложения, в исполняемый файл этого приложения.
Возникла проблема - exeшник, в который пытаюсь записать ресурс, после отработки программы записи уменьшается с 1.04 Мб до 585 Кб и не запускается ("Не является приложением win32"). Сама программа записи ресурсов работает без явных ошибок ( код ниже ). Файлы "new.bmp", "winapi_test.exe" лежат в папке с программой. #include <windows.h> #include <stdio.h> #include <iostream> int ReplaceBitmap(int Number) { // Переменные для чтения и добавления ресурса DWORD dwResSize, dwRead; HANDLE File,hUpdateRes; // Открываем файл для дальнейшего чтения (файл new.bmp) File = CreateFile("new.bmp", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // Если открыть не удалось, то выходим if(File == INVALID_HANDLE_VALUE) return FALSE; // Сохраняем его размер исключив BITMAPFILEHEADER (для остальных ресурсов, исключать размер заголовка не нужно) dwResSize = GetFileSize(File, NULL)-sizeof(BITMAPFILEHEADER); // Если не удалось получить размер, то выходим if(dwResSize <= NULL) { // Закрываем хендл файла CloseHandle(File); return FALSE; } // Создаём массив для чтения файла char *pRes=new char[dwResSize]; // Устанавливаем позицию чтения файла, чтобы не читать заголовок битмапа (для остальных ресурсов следует читать с начала файла и не смещать позицию чтения) SetFilePointer(File,sizeof(BITMAPFILEHEADER),0,0); // Читаем файл if(ReadFile(File, (LPVOID)pRes, dwResSize, &dwRead, NULL) == NULL) { // Закрываем хендл файла CloseHandle(File); return FALSE; } // Начинаем обновлять ресурсы hUpdateRes = BeginUpdateResource("winapi_test.exe", FALSE); if(hUpdateRes == NULL) { // Закрываем хендл файла CloseHandle(File); return FALSE; } // Добавляем ресурс if(UpdateResource(hUpdateRes, RT_BITMAP, MAKEINTRESOURCE(Number), MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), (LPVOID)pRes, dwResSize) == NULL) { // Закрываем хендл файла CloseHandle(File); return FALSE; } // Завершаем обновление if(EndUpdateResource(hUpdateRes, FALSE) == NULL) { // Закрываем хендл файла CloseHandle(File); return FALSE; } // Закрываем хендл файла if(CloseHandle(File) == NULL) return FALSE; return 7; } int WINAPI WinMain (HINSTANCE h, HINSTANCE, LPSTR cmd, int show) { return ReplaceBitmap(3); } |
|
Отправлено: 18:28, 05-10-2012 |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать Delphi sources
или гуглить по "C++ записать данные в ресурсы exe" |
------- Отправлено: 20:15, 14-10-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 57
|
Профиль | Отправить PM | Цитировать BlackEric,
Файл .rc Компиляция утилитой windres создает .o файл, его при линковке подключаю к программе. Судя по возрастающему размеру exe'шника и отсутствию ошибок, линковка проходит корректно. Часть кода программы HBITMAP bm=(HBITMAP)LoadImage(GetModuleHandle(NULL), "BITMAP1",IMAGE_BITMAP,0,0, LR_COPYFROMRESOURCE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION); DWORD err=GetLastError(); Не понимаю, в чем ошибка. |
Отправлено: 20:09, 22-10-2012 | #3 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
как посмотреть что делает скрипт? | vlasoft | Хочу все знать | 1 | 01-10-2011 23:12 | |
HDD - Что делает Vista SP1 Ultimate с HDD?!? | Riw | Накопители (SSD, HDD, USB Flash) | 8 | 30-03-2009 18:17 | |
IE - делает переадресацию на Msn.com | RuLe | Microsoft Windows 2000/XP | 2 | 01-04-2007 09:05 | |
Что делает команда? | Guest | Программное обеспечение Linux и FreeBSD | 19 | 03-06-2004 01:12 |
|