Изменение строки в ресурсе
От: Dreama Россия  
Дата: 17.11.08 15:01
Оценка:
Здесь пример, как можно менять ресурс в программе:
http://msdn.microsoft.com/en-us/library/ms648008(VS.85).aspx

Только вот засада, попытка изменить ресурс в dll из нее самой, ни к чему не приводит.
Первая же строчка —
hExe = LoadLibrary("hand.dll");
возвращает 0x1000000, GetLastError возвращает "0".
В чем тут дело?
Re: Изменение строки в ресурсе
От: Сергей Мухин Россия  
Дата: 17.11.08 15:23
Оценка:
Здравствуйте, Dreama, Вы писали:

D>Здесь пример, как можно менять ресурс в программе:

D>http://msdn.microsoft.com/en-us/library/ms648008(VS.85).aspx

D>Только вот засада, попытка изменить ресурс в dll из нее самой, ни к чему не приводит.

D>Первая же строчка —
D>hExe = LoadLibrary("hand.dll");
D>возвращает 0x1000000, GetLastError возвращает "0".


дык это хорошо!

Return Value

If the function succeeds, the return value is a handle to the module.

If the function fails, the return value is NULL.

---
С уважением,
Сергей Мухин
Re[2]: Изменение строки в ресурсе
От: Dreama Россия  
Дата: 17.11.08 15:35
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>дык это хорошо!

СМ>

СМ>Return Value


стормозил, ошибку дает следующая строка —
hRes = FindResource( hExe, L"IDS_STRING101", RT_STRING);

error = 1814 (ERROR_RESOURCE_NAME_NOT_FOUND)
Но такое имя точно есть. Или тут юникод как-то влияет?
Re[3]: Изменение строки в ресурсе
От: Rocky  
Дата: 17.11.08 15:44
Оценка:
Здравствуйте, Dreama, Вы писали:

D>Здравствуйте, Сергей Мухин, Вы писали:


СМ>>дык это хорошо!

СМ>>

СМ>>Return Value


D>стормозил, ошибку дает следующая строка -

D>hRes = FindResource( hExe, L"IDS_STRING101", RT_STRING);

D>error = 1814 (ERROR_RESOURCE_NAME_NOT_FOUND)

D>Но такое имя точно есть. Или тут юникод как-то влияет?

Скорее всего, вот так надо:
hRes = FindResource( hExe, MAKEINTRESOURCE(IDS_STRING101), RT_STRING);
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Изменение строки в ресурсе
От: Alexey Frolov Беларусь  
Дата: 17.11.08 15:47
Оценка:
Здравствуйте, Dreama, Вы писали:

D>Здравствуйте, Сергей Мухин, Вы писали:


СМ>>дык это хорошо!

СМ>>

СМ>>Return Value


D>стормозил, ошибку дает следующая строка -

D>hRes = FindResource( hExe, MAKEINTRESOURCE(IDS_STRING101), RT_STRING);

D>error = 1814 (ERROR_RESOURCE_NAME_NOT_FOUND)

D>Но такое имя точно есть. Или тут юникод как-то влияет?

надеюсь это значение у вас определено IDS_STRING101 ?
или как минимум вы знаете чему оно равно
Re[4]: Изменение строки в ресурсе
От: Dreama Россия  
Дата: 17.11.08 15:51
Оценка:
Здравствуйте, Alexey Frolov, Вы писали:

AF>надеюсь это значение у вас определено IDS_STRING101 ?

AF>или как минимум вы знаете чему оно равно

кусок из rc файла —

STRINGTABLE
BEGIN
IDS_STRING101 "012345"
END

из resource.h —
#define IDS_STRING101 101
Re[4]: Изменение строки в ресурсе
От: Dreama Россия  
Дата: 17.11.08 15:52
Оценка:
Здравствуйте, Rocky, Вы писали:

R>Скорее всего, вот так надо:

R>
R>hRes = FindResource( hExe, MAKEINTRESOURCE(IDS_STRING101), RT_STRING);
R>


пробовал, та же басня.
Re[4]: Изменение строки в ресурсе
От: Dreama Россия  
Дата: 17.11.08 15:54
Оценка:
Здравствуйте, Alexey Frolov, Вы писали:

AF>надеюсь это значение у вас определено IDS_STRING101 ?

AF>или как минимум вы знаете чему оно равно

Еще смешнее, вот это работает —
int asd = LoadString( GetModuleHandle(L"hand.dll"), IDS_STRING101, sz, sizeof(sz)/sizeof(TCHAR));
Re[5]: Изменение строки в ресурсе
От: Rocky  
Дата: 17.11.08 17:05
Оценка:
Здравствуйте, Dreama, Вы писали:

D>Здравствуйте, Alexey Frolov, Вы писали:


D>Еще смешнее, вот это работает -

D>int asd = LoadString( GetModuleHandle(L"hand.dll"), IDS_STRING101, sz, sizeof(sz)/sizeof(TCHAR));

А тогда, hRes = FindResource( GetModuleHandle(L"hand.dll"), MAKEINTRESOURCE(IDS_STRING101), RT_STRING); работает?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Изменение строки в ресурсе
От: Dreama Россия  
Дата: 17.11.08 17:12
Оценка:
Здравствуйте, Rocky, Вы писали:

R>А тогда, hRes = FindResource( GetModuleHandle(L"hand.dll"), MAKEINTRESOURCE(IDS_STRING101), RT_STRING); работает?


нет
Re[7]: Изменение строки в ресурсе
От: Rocky  
Дата: 17.11.08 17:17
Оценка:
Здравствуйте, Dreama, Вы писали:

D>Здравствуйте, Rocky, Вы писали:


R>>А тогда, hRes = FindResource( GetModuleHandle(L"hand.dll"), MAKEINTRESOURCE(IDS_STRING101), RT_STRING); работает?


D>нет


Ну тогда у меня идей больше нет. Единественное, что могу сказать, что ресурс имеет имя "#101" (т.к. LoadString его грузит), значит проблемы с dll. Из того, что успел посмотреть в инете, был где-то вопрос в форуме по поводу resource dll. В нем говорили, что надо собирать с ключом /NOENTRY (так, кажется). Все, иссяк.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Изменение строки в ресурсе
От: Dreama Россия  
Дата: 17.11.08 17:23
Оценка:
Здравствуйте, Rocky, Вы писали:

R>Ну тогда у меня идей больше нет. Единественное, что могу сказать, что ресурс имеет имя "#101" (т.к. LoadString его грузит), значит проблемы с dll. Из того, что успел посмотреть в инете, был где-то вопрос в форуме по поводу resource dll. В нем говорили, что надо собирать с ключом /NOENTRY (так, кажется). Все, иссяк.


Только что попробовал простейший пример с exe консольным приложением, с вышеуказанным кодом msdn`а. Не работает.
LoadString так же, работает, FindResource нет.
Re[9]: Изменение строки в ресурсе
От: Dreama Россия  
Дата: 17.11.08 22:25
Оценка:
Здравствуйте, Dreama, Вы писали:

D>Только что попробовал простейший пример с exe консольным приложением, с вышеуказанным кодом msdn`а. Не работает.

D>LoadString так же, работает, FindResource нет.

Вот с этим, работает —
MAKEINTRESOURCE((101>>4)+1)

но все оказалось зря, для BeginUpdateResource надо чтобы — "it cannot be currently executing",
т.е сам себе файл изменить строку не может. Решения через WinAPi нет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.