Не получается найти ресурс
От: Buggy  
Дата: 21.10.02 17:12
Оценка:
Прива.
Вот уменя такая проблема. Он мне тут пишет что не может найти ресурс
Вот сделал кака посоветовали написать с 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); 
}

Заранее спасибо...
Re: Не получается найти ресурс
От: whiteForest  
Дата: 21.10.02 17:38
Оценка:
Здравствуйте Buggy, Вы писали:

B>Делаю а он пишет с того места когбудто он не может найти в паке Icon не может найти IDR_MAINFRAME.



B>// Locate the dialog box resource in the .EXE file.

B>hRes = FindResource(hExe, "IDR_MAINFRAME", RT_ICON);

hRes = FindResource(hExe, MAKEINTRESOURCE(IDR_MAINFRAME), RT_ICON);
ASSERT(hRes);


так-то понадежнее будет.

B>Заранее спасибо...
Re[2]: Не получается найти ресурс
От: Buggy  
Дата: 21.10.02 19:41
Оценка:
Здравствуйте 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>
F>hRes = FindResource(hExe, MAKEINTRESOURCE(IDR_MAINFRAME), RT_ICON);
F>ASSERT(hRes);
F>


F>так-то понадежнее будет.


B>>Заранее спасибо...


НЕТ НЕТ ты не понял я ищу ресурс не в своем exe а в совершенно другом находящимся на диске....
Re[3]: Не получается найти ресурс
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.10.02 04:26
Оценка:
Здравствуйте Buggy, Вы писали:

B>НЕТ НЕТ ты не понял я ищу ресурс не в своем exe а в совершенно другом находящимся на диске....


а не пытается ли товарищъ получить иконку, которую проводник отображает для этого exe?
Re[4]: Не получается найти ресурс
От: Buggy  
Дата: 22.10.02 18:13
Оценка:
Здравствуйте Odi$$ey, Вы писали:

O$>Здравствуйте Buggy, Вы писали:

B>>НЕТ НЕТ ты не понял я ищу ресурс не в своем exe а в совершенно другом находящимся на диске....


O$>а не пытается ли товарищъ получить иконку, которую проводник отображает для этого exe?

ДА ДА ТОВАРИЩ ТОЕСТЬ Я ИМЕННО ЭТО И ПЫТАЕТСЯ ЧУВАК!!!!
Re[5]: Не получается найти ресурс
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 23.10.02 03:49
Оценка:
Здравствуйте Buggy, Вы писали:

B>>>НЕТ НЕТ ты не понял я ищу ресурс не в своем exe а в совершенно другом находящимся на диске....


O$>>а не пытается ли товарищъ получить иконку, которую проводник отображает для этого exe?

B>ДА ДА ТОВАРИЩ ТОЕСТЬ Я ИМЕННО ЭТО И ПЫТАЕТСЯ ЧУВАК!!!!


даю наводку — SHGetFileInfo, IExtractIcon, ExtractAssociatedIcon
Re[6]: Не получается найти ресурс
От: Buggy  
Дата: 23.10.02 05:31
Оценка:
Здравствуйте Odi$$ey, Вы писали:

O$>Здравствуйте Buggy, Вы писали:

B>>>>НЕТ НЕТ ты не понял я ищу ресурс не в своем exe а в совершенно другом находящимся на диске....


O$>>>а не пытается ли товарищъ получить иконку, которую проводник отображает для этого exe?

B>>ДА ДА ТОВАРИЩ ТОЕСТЬ Я ИМЕННО ЭТО И ПЫТАЕТСЯ ЧУВАК!!!!


O$>даю наводку — SHGetFileInfo, IExtractIcon, ExtractAssociatedIcon

Так наводка понятна спасибо, а теперь если знаете почему у меня не находит FindResource имя ico файлв под названием IDR_MAINFRAME все кажется правильно RT_ICON почему не может может при компиле он заменяет это имя каимнить другим...
Re[7]: Не получается найти ресурс
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 23.10.02 06:12
Оценка:
Здравствуйте Buggy, Вы писали:

B>Так наводка понятна спасибо, а теперь если знаете почему у меня не находит FindResource имя ico файлв под названием IDR_MAINFRAME все кажется правильно RT_ICON почему не может может при компиле он заменяет это имя каимнить другим...


вот это

hRes = FindResource(hExe, "IDR_MAINFRAME", RT_ICON);


точно неправильно, т.к. по жизни IDR_MAINFRAME это число, а ты пытаешься искать ресурс со строковым именем "IDR_MAINFRAME", т.ч. про MAKEINTRESOURCE тебе говорили совершенно справедливо.

во-вторых, совершенно не факт, что значение IDR_MAINFRAME в той программе где вызывается FindResource совпадает с ID иконки в том exe из которого ты ее пытаешься вытащить

в-третьих, проводник показывает для файла иконку с наименьшим идентификатором (в простейшем случае, вообще-то это можно поменять при помощи расширений проводника), его конкретное значение надо сначала узнать, а только потом тянуть иконку

если все же хочется выяснить почему у тебя не работала FindResource попробуй для начала посмотреть чему равно IDR_MAINFRAME в том exe jnrelf ты хочешь вытянуть иконку (например пусть будет 128) и сделай так:

hRes = FindResource(hExe, MAKEINTRESOURCE((WORD)128), RT_ICON);


что получилось?
Re[8]: Не получается найти ресурс
От: Buggy  
Дата: 23.10.02 17:37
Оценка:
Здравствуйте Odi$$ey, Вы писали:

O$>Здравствуйте Buggy, Вы писали:

B>>Так наводка понятна спасибо, а теперь если знаете почему у меня не находит FindResource имя ico файлв под названием IDR_MAINFRAME все кажется правильно RT_ICON почему не может может при компиле он заменяет это имя каимнить другим...


O$>вот это

O$>
O$>hRes = FindResource(hExe, "IDR_MAINFRAME", RT_ICON); 
O$>


O$>точно неправильно, т.к. по жизни IDR_MAINFRAME это число, а ты пытаешься искать ресурс со строковым именем "IDR_MAINFRAME", т.ч. про MAKEINTRESOURCE тебе говорили совершенно справедливо.

O$>во-вторых, совершенно не факт, что значение IDR_MAINFRAME в той программе где вызывается FindResource совпадает с ID иконки в том exe из которого ты ее пытаешься вытащить

O$>в-третьих, проводник показывает для файла иконку с наименьшим идентификатором (в простейшем случае, вообще-то это можно поменять при помощи расширений проводника), его конкретное значение надо сначала узнать, а только потом тянуть иконку

O$>если все же хочется выяснить почему у тебя не работала FindResource попробуй для начала посмотреть чему равно IDR_MAINFRAME в том exe jnrelf ты хочешь вытянуть иконку (например пусть будет 128) и сделай так:

O$>
O$>hRes = FindResource(hExe, MAKEINTRESOURCE((WORD)128), RT_ICON); 
O$>


O$>что получилось?
Прива.
Так все получилось ты праильно сказал что ID врятли будет соответсвовать самой Ico но я так потестил он у меня почемуто указал на 2 тоесть я загружал IDR_MAINFRAME в проге она 128 но по моим тестам она 2 а если я создам еще одно ico файл внтри и захочу его вписать другого то оно уже IDI_ICON1 138 но по тестам 1. Вот не могу выявить зависимость как вобще эта получается???

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.