Прива.
Вот уменя такая проблема. Он мне тут пишет что не может найти ресурс
Вот сделал кака посоветовали написать с UpdateResource. НО ладно я написал два приложения на MFC они обсолютно индентичны кроме того что у каждого из окошко разное рисуночек IDR_MAINFRAME.
Делаю а он пишет с того места когбудто он не может найти в паке Icon не может найти IDR_MAINFRAME.
Что такое не пойму а вот код
#include <iostream.h>
#include <windows.h>
#include <stdio.h>
#include <winbase.h>
int main()
{
HGLOBAL hResLoad; // handle to loaded resource
HMODULE hExe; // handle to existing .EXE file
HRSRC hRes; // handle/ptr. to res. info. in hExe
HANDLE hUpdateRes; // update resource handle
LPVOID lpResLock; // pointer to resource data
BOOL result;
// Load the .EXE file that contains the dialog box you want to copy.
hExe = LoadLibrary("c:\\hand.exe");
if (hExe == NULL)
{
cout<<"Could not load exe.\n";
return 0;
}
// Locate the dialog box resource in the .EXE file.
hRes = FindResource(hExe, "IDR_MAINFRAME", RT_ICON);
if (hRes == NULL)
{
cout<<"Could not locate dialog box.\n" ;
return 0;
}
// Load the dialog box into global memory.
hResLoad = LoadResource(hExe, hRes);
if (hResLoad == NULL)
{
cout<<"Could not load dialog box.\n";
return 0;
}
// Lock the dialog box into global memory.
lpResLock = LockResource(hResLoad);
if (lpResLock == NULL)
{
cout<<"Could not lock dialog box.\n";
return 0;
}
// Open the file to which you want to add the dialog box resource.
hUpdateRes = BeginUpdateResource("c:\\foot.exe", FALSE);
if (hUpdateRes == NULL)
{
cout<<"Could not open file for writing.\n";
return 0;
}
// Add the dialog box resource to the update list.
result = UpdateResource(hUpdateRes, // update resource handle
RT_ICON, // change dialog box resource
"IDR_MAINFRAME", // dialog box name
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), // neutral language
lpResLock, // ptr to resource info
SizeofResource(hExe, hRes)); // size of resource info.
if (result == FALSE)
{
cout<<"Could not add resource.\n";
return 0;
}
// Write changes to FOOT.EXE and then close it.
if (!EndUpdateResource(hUpdateRes, FALSE))
{
cout<<"Could not write changes to file.\n";
return 0;
}
// Clean up.
if (!FreeLibrary(hExe))
{
cout<<"Could not free executable.\n";
return 0;
}
return(TRUE);
}
Здравствуйте whiteForest, Вы писали:
F>Здравствуйте Buggy, Вы писали:
B>>Делаю а он пишет с того места когбудто он не может найти в паке Icon не может найти IDR_MAINFRAME.
F> B>>// Locate the dialog box resource in the .EXE file. B>>hRes = FindResource(hExe, "IDR_MAINFRAME", RT_ICON);
F>
Так наводка понятна спасибо, а теперь если знаете почему у меня не находит FindResource имя ico файлв под названием IDR_MAINFRAME все кажется правильно RT_ICON почему не может может при компиле он заменяет это имя каимнить другим...
Здравствуйте Buggy, Вы писали:
B>Так наводка понятна спасибо, а теперь если знаете почему у меня не находит FindResource имя ico файлв под названием IDR_MAINFRAME все кажется правильно RT_ICON почему не может может при компиле он заменяет это имя каимнить другим...
точно неправильно, т.к. по жизни IDR_MAINFRAME это число, а ты пытаешься искать ресурс со строковым именем "IDR_MAINFRAME", т.ч. про MAKEINTRESOURCE тебе говорили совершенно справедливо.
во-вторых, совершенно не факт, что значение IDR_MAINFRAME в той программе где вызывается FindResource совпадает с ID иконки в том exe из которого ты ее пытаешься вытащить
в-третьих, проводник показывает для файла иконку с наименьшим идентификатором (в простейшем случае, вообще-то это можно поменять при помощи расширений проводника), его конкретное значение надо сначала узнать, а только потом тянуть иконку
если все же хочется выяснить почему у тебя не работала FindResource попробуй для начала посмотреть чему равно IDR_MAINFRAME в том exe jnrelf ты хочешь вытянуть иконку (например пусть будет 128) и сделай так:
O$>Здравствуйте Buggy, Вы писали:
B>>Так наводка понятна спасибо, а теперь если знаете почему у меня не находит FindResource имя ico файлв под названием IDR_MAINFRAME все кажется правильно RT_ICON почему не может может при компиле он заменяет это имя каимнить другим...
O$>точно неправильно, т.к. по жизни IDR_MAINFRAME это число, а ты пытаешься искать ресурс со строковым именем "IDR_MAINFRAME", т.ч. про MAKEINTRESOURCE тебе говорили совершенно справедливо.
O$>во-вторых, совершенно не факт, что значение IDR_MAINFRAME в той программе где вызывается FindResource совпадает с ID иконки в том exe из которого ты ее пытаешься вытащить
O$>в-третьих, проводник показывает для файла иконку с наименьшим идентификатором (в простейшем случае, вообще-то это можно поменять при помощи расширений проводника), его конкретное значение надо сначала узнать, а только потом тянуть иконку
O$>если все же хочется выяснить почему у тебя не работала FindResource попробуй для начала посмотреть чему равно IDR_MAINFRAME в том exe jnrelf ты хочешь вытянуть иконку (например пусть будет 128) и сделай так:
O$>что получилось?
Прива.
Так все получилось ты праильно сказал что ID врятли будет соответсвовать самой Ico но я так потестил он у меня почемуто указал на 2 тоесть я загружал IDR_MAINFRAME в проге она 128 но по моим тестам она 2 а если я создам еще одно ico файл внтри и захочу его вписать другого то оно уже IDI_ICON1 138 но по тестам 1. Вот не могу выявить зависимость как вобще эта получается???