Re[10]: [linkerr] DllMain already defined
От: MasterZiv СССР  
Дата: 28.05.12 14:11
Оценка:
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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.