On 05/28/2012 05:10 PM, AlexGin wrote:
> Так первоначальный вызов AfxSetResourceHandle делается не в пользовательском
> *.cpp файле, а в библитотеке MFC.
Наоборот, там он никогда не делается.
MFC не нужно делать AfxSetResourceHandle для своих ресурсов -- смотри код в
AfxFindResource или что -то в этом роде.
Или ещё почитай про extension DLL.
> Пример:
>
> CCommandData* pCommandData = (CCommandData*)ptr->GetThis();
> if (pCommandData)
> {
> HINSTANCE hClientResources = AfxGetResourceHandle();
hClientResources = AfxGetResourceHandle(); -- это не нужно.
> AfxSetResourceHandle(::GetModuleHandle("Telecontrol.dll"));
> // ЗДЕСЬ МЫ РАБОТАЕМ С РЕСУРСАМИ БИБЛТОТЕКИ "Telecontrol.dll"
> ..................................
> ..................................
> ..................................
> AfxSetResourceHandle(hClientResources); --
-- и это не нужно.
> delete pCommandData;
> }
НЕ нужно возвращать обратно ресурсник, это бессмысленно.
Итак, простое правило:
1) КАЖДЫЙ раз в коде, непосредственно перед тем, как выполнить какую-то
операцию, которая загружает откуда-то ресурсы, ты должен
проставить хэндл библиотеки с ресурсами с помощью AfxSetResourceHandle().
Исключение составляют ресурсы из библиотек MFC и других extension DLL.
2) Если у тебя в коде идёт подряд скажем 20 операций, загружающих ресурсы,
нужно ли ставить AfxSetResourceHandle() перед каждой из них -- зависит
от твоего кода. Если ты уверен на 100%, что никакой другой код в промежутках
(вызовы дочерних функций, вызовы сообщений и их обработка) не переустановит
ResourceHandle, то можешь сделать это только один раз, в начале.
3) Возвращать его при этом нет смысла -- см правило 1)
Posted via RSDN NNTP Server 2.1 beta