Re[3]: Динамическое переключение языка интерфейса в MFC-прил
От: unb  
Дата: 02.05.06 09:02
Оценка:
Исправлено форматирование текста. — SchweinDeBurg

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

SDB>2. Внутрь второго вызова FromName() заходить пробовали? Что конкретно там обламывается?


Проблема видимо связана с механизмом работы MFC Extensions Dll,до загрузки библиотек классы ищутся в первом цикле (кототрый search app specific classes),после загрузки библиотеки в InitInstance,в первом цикле ничего не находится,зато почему то находится во втором.После освобождения библиотеки,нужный класс не находится ни в первом ни во втором цикле.

Код FromName:

CRuntimeClass* PASCAL CRuntimeClass::FromName(LPCSTR lpszClassName)
{
        CRuntimeClass* pClass;

    // search app specific classes
    AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
    AfxLockGlobals(CRIT_RUNTIMECLASSLIST);
    for (pClass = pModuleState->m_classList; pClass != NULL;
        pClass = pClass->m_pNextClass)
    {
        if (lstrcmpA(lpszClassName, pClass->m_lpszClassName) == 0)
        {
            AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);
            return pClass;
        }
    }
    AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);
#ifdef _AFXDLL
    // search classes in shared DLLs
    AfxLockGlobals(CRIT_DYNLINKLIST);
    for (CDynLinkLibrary* pDLL = pModuleState->m_libraryList; pDLL != NULL;
        pDLL = pDLL->m_pNextDLL)
    {
        for (pClass = pDLL->m_classList; pClass != NULL;
            pClass = pClass->m_pNextClass)
        {
            if (lstrcmpA(lpszClassName, pClass->m_lpszClassName) == 0)
            {
                AfxUnlockGlobals(CRIT_DYNLINKLIST);
                return pClass;
            }
        }
    }
    AfxUnlockGlobals(CRIT_DYNLINKLIST);
#endif

    return NULL; // not found
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.