иерархия классов mfc
От: Zergulius  
Дата: 31.03.03 23:44
Оценка:
Привет! Если кто-то знает — помогите. Мне нужно получить всю иерархию классов MFC, то есть как бы обойти всё дерево, чтобы в дальнейшем эту информацию где-то использовать...
Re: иерархия классов mfc
От: small_cat Россия  
Дата: 01.04.03 05:29
Оценка:
Если из корня (CObject) — то боюсь никак. Если нужна конкретная ветка — то RTTI. Снизу вверх, ессно.
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
Re: иерархия классов mfc
От: Max_Akimov Россия  
Дата: 01.04.03 09:59
Оценка:
Здравствуйте, Zergulius, Вы писали:

Z>Привет! Если кто-то знает — помогите. Мне нужно получить всю иерархию классов MFC, то есть как бы обойти всё дерево, чтобы в дальнейшем эту информацию где-то использовать...


Всю скорее всего не получится. Можно получить список классов, объявленных как сериализуемые(DECLARE_SERIAL).
При инициализации модуля их RuntimeClass поля регистрируются в списке m_classList класса AFX_MODULE_STATE.

    AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
    CRuntimeClass* pClass = pModuleState->m_classList.GetHead();
    while (pClass != NULL)
    {
        TRACE1("%s\n", pClass->m_lpszClassName);
        pClass = pModuleState->m_classList.GetNext(pClass);
    }
Re[2]: иерархия классов mfc
От: Zergulius  
Дата: 01.04.03 15:42
Оценка:
Здравствуйте, Max_Akimov, Вы писали:

MA>Всю скорее всего не получится. Можно получить список классов, объявленных как сериализуемые(DECLARE_SERIAL).

MA>При инициализации модуля их RuntimeClass поля регистрируются в списке m_classList класса AFX_MODULE_STATE.

MA>
MA>    AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
MA>    CRuntimeClass* pClass = pModuleState->m_classList.GetHead();
MA>    while (pClass != NULL)
MA>    {
MA>        TRACE1("%s\n", pClass->m_lpszClassName);
MA>        pClass = pModuleState->m_classList.GetNext(pClass);
MA>    }

MA>

Спасибо за совет, но список гипотетических RuntimeClassoв пуст.Может список заполняется рантаймами только созданных, а не базовых(mfc), сериализуемых классов...
Re[2]: иерархия классов mfc
От: Zergulius  
Дата: 03.04.03 16:37
Оценка:
Здравствуйте, Max_Akimov, Вы писали:

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


Z>>Привет! Если кто-то знает — помогите. Мне нужно получить всю иерархию классов MFC, то есть как бы обойти всё дерево, чтобы в дальнейшем эту информацию где-то использовать...


MA>Всю скорее всего не получится. Можно получить список классов, объявленных как сериализуемые(DECLARE_SERIAL).

MA>При инициализации модуля их RuntimeClass поля регистрируются в списке m_classList класса AFX_MODULE_STATE.

MA>
MA>    AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
MA>    CRuntimeClass* pClass = pModuleState->m_classList.GetHead();
MA>    while (pClass != NULL)
MA>    {
MA>        TRACE1("%s\n", pClass->m_lpszClassName);
MA>        pClass = pModuleState->m_classList.GetNext(pClass);
MA>    }

MA>


Ну так что!!!!!!!
Re[3]: иерархия классов mfc
От: Max_Akimov Россия  
Дата: 04.04.03 09:37
Оценка:
Здравствуйте, Zergulius, Вы писали:


Z>Спасибо за совет, но список гипотетических RuntimeClassoв пуст.Может список заполняется рантаймами только созданных, а не базовых(mfc), сериализуемых классов...


Он заполняется классами которые линкуются к твоему модулю.
если проект собирается как Use MFC in a Shared DLL, то базовые классы
попадут в список в mfc.dll
Re[4]: иерархия классов mfc
От: Zergulius  
Дата: 07.04.03 17:58
Оценка:
Здравствуйте, Max_Akimov, Вы писали:

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


MA>

Z>>Спасибо за совет, но список гипотетических RuntimeClassoв пуст.Может список заполняется рантаймами только созданных, а не базовых(mfc), сериализуемых классов...

MA>Он заполняется классами которые линкуются к твоему модулю.

MA>если проект собирается как Use MFC in a Shared DLL, то базовые классы
MA>попадут в список в mfc.dll
а как сделать, чтобы базовые классы попали в myapp.exe!!?? Sorry za dostavanie...
Re: иерархия классов mfc
От: Serguei666 Беларусь  
Дата: 08.04.03 03:59
Оценка:
Здравствуйте, Zergulius, Вы писали:

Z>Привет! Если кто-то знает — помогите. Мне нужно получить всю иерархию классов MFC, то есть как бы обойти всё дерево, чтобы в дальнейшем эту информацию где-то использовать...

А для чего вам это и как вы собираетесь ее использовать? Можете поподробнее?
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[2]: иерархия классов mfc
От: Zergulius  
Дата: 09.04.03 16:30
Оценка:
Здравствуйте, Serguei666, Вы писали:

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


Z>Привет! Если кто-то знает — помогите. Мне нужно получить всю иерархию классов MFC, то есть как бы обойти всё дерево, чтобы в дальнейшем эту информацию где-то использовать...

S>А для чего вам это и как вы собираетесь ее использовать? Можете поподробнее?
Да так, ничего интересного...Просто лабу делаю..Вообще то задание было проще, просто интересно стало.. Хочу полученную инфомацию о mfc классах вывести в CTreeCtrl в виде дерева..Это же просто(просто я не знаю),неужели никто не поможет: не сам же я буду делать...Буду ждать.Обещаю высокие отметки. подумайте — деловое предложение...
Re[3]: иерархия классов mfc
От: Serguei666 Беларусь  
Дата: 10.04.03 05:18
Оценка:
Здравствуйте, Zergulius, Вы писали:

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


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


Z>Привет! Если кто-то знает — помогите. Мне нужно получить всю иерархию классов MFC, то есть как бы обойти всё дерево, чтобы в дальнейшем эту информацию где-то использовать...

S>А для чего вам это и как вы собираетесь ее использовать? Можете поподробнее?
Z>Да так, ничего интересного...Просто лабу делаю..Вообще то задание было проще, просто интересно стало.. Хочу полученную инфомацию о mfc классах вывести в CTreeCtrl в виде дерева..
В MFC есть классы, не унаследованные ни от кого. Типа CRect. К какому месту дерева будете их приклеивать? Но это так, к слову.

Z>Это же просто(просто я не знаю),

С чего вы взяли, что просто? Насколько я знаю, в MFC нету места, где бы информация о классах центализованно лежала, откуда можно было бы просто взять и дерево заполнить.

Z>неужели никто не поможет:

Вполне может быть, что никто и не поможет...

Z>не сам же я буду делать

Коли взялся за гуж...
Вы же сказали, что задание изначально было не такое. Вот к начальному заданию и вернитесь, может оно попроще

Z>...Буду ждать.Обещаю высокие отметки. подумайте — деловое предложение...

"Буду ждать" — это несерьезно. Нужно так — вы делаете потихоньку, нас в известность о прогрессе ставите, рассказываете, где споткнулсь, мы вам помогаем потихоньку.
Если хотите дождаться работающего кода, то вполне возможно, что и не дождетесь.

Могу дать первую подсказку (это шаг, который предпринял бы я сам): при сериализации объекта из потока читается имя класса объекта. Затем MFC находит каким-то образом RuntimeClass для данного имени класса и создает объект класса (Само собой, если имени не находится, сериализация заканчиватся досрочно с ошибкой). Иными словами, MFC пробегает по где-то хранящемуся списку имен классов и делает сравнение строк. Вот и посмотрите, как MFC это делает. Может, тот код наведет вас на мысль, как это сделать.
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[4]: иерархия классов mfc
От: Аноним  
Дата: 15.04.03 08:45
Оценка:
Здравствуйте, Serguei666, Вы писали:

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


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


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


Z>Привет! Если кто-то знает — помогите. Мне нужно получить всю иерархию классов MFC, то есть как бы обойти всё дерево, чтобы в дальнейшем эту информацию где-то использовать...

S>А для чего вам это и как вы собираетесь ее использовать? Можете поподробнее?
Z>Да так, ничего интересного...Просто лабу делаю..Вообще то задание было проще, просто интересно стало.. Хочу полученную инфомацию о mfc классах вывести в CTreeCtrl в виде дерева..
S>В MFC есть классы, не унаследованные ни от кого. Типа CRect. К какому месту дерева будете их приклеивать? Но это так, к слову.

Z>Это же просто(просто я не знаю),

S>С чего вы взяли, что просто? Насколько я знаю, в MFC нету места, где бы информация о классах центализованно лежала, откуда можно было бы просто взять и дерево заполнить.

Z>неужели никто не поможет:

S>Вполне может быть, что никто и не поможет...

Z>не сам же я буду делать

S>Коли взялся за гуж...
S>Вы же сказали, что задание изначально было не такое. Вот к начальному заданию и вернитесь, может оно попроще

Z>...Буду ждать.Обещаю высокие отметки. подумайте — деловое предложение...

S>"Буду ждать" — это несерьезно. Нужно так — вы делаете потихоньку, нас в известность о прогрессе ставите, рассказываете, где споткнулсь, мы вам помогаем потихоньку.
S>Если хотите дождаться работающего кода, то вполне возможно, что и не дождетесь.

S>Могу дать первую подсказку (это шаг, который предпринял бы я сам): при сериализации объекта из потока читается имя класса объекта. Затем MFC находит каким-то образом RuntimeClass для данного имени класса и создает объект класса (Само собой, если имени не находится, сериализация заканчиватся досрочно с ошибкой). Иными словами, MFC пробегает по где-то хранящемуся списку имен классов и делает сравнение строк. Вот и посмотрите, как MFC это делает. Может, тот код наведет вас на мысль, как это сделать.


Спасибо за подсказку. Нашёл я этот код в arccore.cpp
#pragma code_seg(AFX_CORE2_SEG)
// 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(szClassName, pClass->m_lpszClassName) == 0)
{
AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);
return pClass;
}
}
AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);

// 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(szClassName, pClass->m_lpszClassName) == 0)
{
AfxUnlockGlobals(CRIT_DYNLINKLIST);
return pClass;
}
}
}
AfxUnlockGlobals(CRIT_DYNLINKLIST);

при поиске in shared DLLs список заполняется Runtimeclassami, но далеко не всеми
Re[5]: иерархия классов mfc
От: Аноним  
Дата: 15.04.03 14:57
Оценка:
Здравствуйте, Аноним, Вы писали:

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


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


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


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


Z>Привет! Если кто-то знает — помогите. Мне нужно получить всю иерархию классов MFC, то есть как бы обойти всё дерево, чтобы в дальнейшем эту информацию где-то использовать...

S>А для чего вам это и как вы собираетесь ее использовать? Можете поподробнее?
Z>Да так, ничего интересного...Просто лабу делаю..Вообще то задание было проще, просто интересно стало.. Хочу полученную инфомацию о mfc классах вывести в CTreeCtrl в виде дерева..
S>В MFC есть классы, не унаследованные ни от кого. Типа CRect. К какому месту дерева будете их приклеивать? Но это так, к слову.

Z>Это же просто(просто я не знаю),

S>С чего вы взяли, что просто? Насколько я знаю, в MFC нету места, где бы информация о классах центализованно лежала, откуда можно было бы просто взять и дерево заполнить.

Z>неужели никто не поможет:

S>Вполне может быть, что никто и не поможет...

Z>не сам же я буду делать

S>Коли взялся за гуж...
S>Вы же сказали, что задание изначально было не такое. Вот к начальному заданию и вернитесь, может оно попроще

Z>...Буду ждать.Обещаю высокие отметки. подумайте — деловое предложение...

S>"Буду ждать" — это несерьезно. Нужно так — вы делаете потихоньку, нас в известность о прогрессе ставите, рассказываете, где споткнулсь, мы вам помогаем потихоньку.
S>Если хотите дождаться работающего кода, то вполне возможно, что и не дождетесь.

S>Могу дать первую подсказку (это шаг, который предпринял бы я сам): при сериализации объекта из потока читается имя класса объекта. Затем MFC находит каким-то образом RuntimeClass для данного имени класса и создает объект класса (Само собой, если имени не находится, сериализация заканчиватся досрочно с ошибкой). Иными словами, MFC пробегает по где-то хранящемуся списку имен классов и делает сравнение строк. Вот и посмотрите, как MFC это делает. Может, тот код наведет вас на мысль, как это сделать.


А>Спасибо за подсказку. Нашёл я этот код в arccore.cpp

А>#pragma code_seg(AFX_CORE2_SEG)
А>// 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(szClassName, pClass->m_lpszClassName) == 0)
А> {
А> AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);
А> return pClass;
А> }
А> }
А> AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);

А> // 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(szClassName, pClass->m_lpszClassName) == 0)
А> {
А> AfxUnlockGlobals(CRIT_DYNLINKLIST);
А> return pClass;
А> }
А> }
А> }
А> AfxUnlockGlobals(CRIT_DYNLINKLIST);


А>при поиске in shared DLLs список заполняется Runtimeclassami, но далеко не всеми

Вы нашли правильное место.
Теперь осталось выяснить, 1) что за классы в списке pDLL->m_classList, 2) как они туда попадают и 3) почему они там не все.
Переменная pClass имеет тип CRuntimeClass. В общем, этот факт помогает ответить на 1-ый вопрос и догадатся об ответах на вопросы 2 и 3.
Итак:
1) В списке находятся указатели на CRuntimeClass структуры
Ответы на вопросы 2 и 3 имеют силу предположения, т.е. я не уверен, что все именно так на 100%
2) CRuntimeClass структура при создании самой себя регистрирует себя в списке
3) Очевидно, что в списке только те классы, которые имеют CRuntimeClass структуры

Вывод: вы можете, используя данный список, составить иерархию классов MFC, но только тех, которые имеют CRuntimeClass структуры.
Альтернативного решения по нахождению списка классов MFC я не могу предложить, ибо не знаю. Вполне возможно, что простого решения этой задачи нет. Конечно, можно попытатся открыть MFC LIB и прочитать оттуда все, но это однозначно не простое решение и помочь вам в этом я тоже не смогу.
Re[6]: иерархия классов mfc
От: Zergulius  
Дата: 15.04.03 20:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


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


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


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


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


Z>Привет! Если кто-то знает — помогите. Мне нужно получить всю иерархию классов MFC, то есть как бы обойти всё дерево, чтобы в дальнейшем эту информацию где-то использовать...

S>А для чего вам это и как вы собираетесь ее использовать? Можете поподробнее?
Z>Да так, ничего интересного...Просто лабу делаю..Вообще то задание было проще, просто интересно стало.. Хочу полученную инфомацию о mfc классах вывести в CTreeCtrl в виде дерева..
S>В MFC есть классы, не унаследованные ни от кого. Типа CRect. К какому месту дерева будете их приклеивать? Но это так, к слову.

Z>Это же просто(просто я не знаю),

S>С чего вы взяли, что просто? Насколько я знаю, в MFC нету места, где бы информация о классах центализованно лежала, откуда можно было бы просто взять и дерево заполнить.

Z>неужели никто не поможет:

S>Вполне может быть, что никто и не поможет...

Z>не сам же я буду делать

S>Коли взялся за гуж...
S>Вы же сказали, что задание изначально было не такое. Вот к начальному заданию и вернитесь, может оно попроще

Z>...Буду ждать.Обещаю высокие отметки. подумайте — деловое предложение...

S>"Буду ждать" — это несерьезно. Нужно так — вы делаете потихоньку, нас в известность о прогрессе ставите, рассказываете, где споткнулсь, мы вам помогаем потихоньку.
S>Если хотите дождаться работающего кода, то вполне возможно, что и не дождетесь.

S>Могу дать первую подсказку (это шаг, который предпринял бы я сам): при сериализации объекта из потока читается имя класса объекта. Затем MFC находит каким-то образом RuntimeClass для данного имени класса и создает объект класса (Само собой, если имени не находится, сериализация заканчиватся досрочно с ошибкой). Иными словами, MFC пробегает по где-то хранящемуся списку имен классов и делает сравнение строк. Вот и посмотрите, как MFC это делает. Может, тот код наведет вас на мысль, как это сделать.


А>Спасибо за подсказку. Нашёл я этот код в arccore.cpp

А>#pragma code_seg(AFX_CORE2_SEG)
А>// 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(szClassName, pClass->m_lpszClassName) == 0)
А> {
А> AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);
А> return pClass;
А> }
А> }
А> AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);

А> // 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(szClassName, pClass->m_lpszClassName) == 0)
А> {
А> AfxUnlockGlobals(CRIT_DYNLINKLIST);
А> return pClass;
А> }
А> }
А> }
А> AfxUnlockGlobals(CRIT_DYNLINKLIST);


А>при поиске in shared DLLs список заполняется Runtimeclassami, но далеко не всеми

А>Вы нашли правильное место.
А>Теперь осталось выяснить, 1) что за классы в списке pDLL->m_classList, 2) как они туда попадают и 3) почему они там не все.
А>Переменная pClass имеет тип CRuntimeClass. В общем, этот факт помогает ответить на 1-ый вопрос и догадатся об ответах на вопросы 2 и 3.
А>Итак:
А>1) В списке находятся указатели на CRuntimeClass структуры
А>Ответы на вопросы 2 и 3 имеют силу предположения, т.е. я не уверен, что все именно так на 100%
А>2) CRuntimeClass структура при создании самой себя регистрирует себя в списке
А>3) Очевидно, что в списке только те классы, которые имеют CRuntimeClass структуры

А>Вывод: вы можете, используя данный список, составить иерархию классов MFC, но только тех, которые имеют CRuntimeClass структуры.

..in my имхо ..
В этот список попадают CRuntimeClassы только прилинкованых к модулю приложения классов, остальные RunTimы подгружаются из mfcXX.dll,то есть состояние моего модуля приложения не может содержать списка с runtimами mfc,то есть мне надо слинковать моё приложение с mfc в один модуль...Как..?пробовал #pragma comment(lib,"mfc42d.lib")-не работает(результат аналогичен), если #pragma comment(lib,"mfc42.lib")-accsess violation...Кстати я думаю, что runtimы, которые всё-таки попали в список,используются для создания объектов,используемых для поиска других рантаймов в какой-то хэш таблице...sorry за ошибочное мнение..

Dump of all classes:
CDockState
CMapWordToOb
CMapStringToString
CMapStringToOb
CStringList
CObList
CWordArray
CStringArray
CObArray
CDWordArray
CByteArray


А>Альтернативного решения по нахождению списка классов MFC я не могу предложить, ибо не знаю. Вполне возможно, что простого решения этой задачи нет. Конечно, можно попытатся открыть MFC LIB и прочитать оттуда все, но это однозначно не простое решение и помочь вам в этом я тоже не смогу.
Re[7]: иерархия классов mfc
От: Serguei666 Беларусь  
Дата: 15.04.03 22:15
Оценка:
Здравствуйте, Zergulius, Вы писали:

А>Вывод: вы можете, используя данный список, составить иерархию классов MFC, но только тех, которые имеют CRuntimeClass структуры.

Z>..in my имхо ..
Z>В этот список попадают CRuntimeClassы только прилинкованых к модулю приложения классов, остальные RunTimы подгружаются из mfcXX.dll,то есть состояние моего модуля приложения не может содержать списка с runtimами mfc,то есть мне надо слинковать моё приложение с mfc в один модуль...

Не понял, зачем нужно линковать "приложение с mfc в один модуль". Вы что, хотите прилинковать MFC статически? И что это изменит?
Почему нельзя просто найти MFCшный модуль и пробежатся по нему? Как, по-вашему, не переопределенные MFC-классы серализуются?

Z>Как..?пробовал #pragma comment(lib,"mfc42d.lib")-не работает(результат аналогичен), если #pragma comment(lib,"mfc42.lib")-accsess violation...


Не надо pragmой злоупотреблять. Идите в Project Settings диалог, "General" Tab, выберите "Use MFC in a static library" в первом комбо боксе.

Z>Кстати я думаю, что runtimы, которые всё-таки попали в список,используются для создания объектов,используемых для поиска других рантаймов в какой-то хэш таблице...sorry за ошибочное мнение..


Не надо извинятся. Бывает.
То, что вы сказали, действительно ошибочное мнение.
Я вам ранее написал — "3) Очевидно, что в списке только те классы, которые имеют CRuntimeClass структуры". Это немного неточно, как я теперь вижу. Думаю, правилнее будет так: "Очевидно, что в списке только те классы, которые имеют СЕРИАЛИЗУЕМЫЕ CRuntimeClass структуры"
Теперь идете запускаете поиск IMPLEMENT_SERIAL по исходникам MFC и находите только вот такие строки:

MFC\SRC\ARRAY_B.CPP(333):IMPLEMENT_SERIAL(CByteArray, CObject, 0)
MFC\SRC\ARRAY_D.CPP(351):IMPLEMENT_SERIAL(CDWordArray, CObject, 0)
MFC\SRC\ARRAY_O.CPP(335):IMPLEMENT_SERIAL(CObArray, CObject, 0)
MFC\SRC\ARRAY_S.CPP(409):IMPLEMENT_SERIAL(CStringArray, CObject, 0)
MFC\SRC\ARRAY_W.CPP(351):IMPLEMENT_SERIAL(CWordArray, CObject, 0)
MFC\SRC\DOCKSTAT.CPP(712):IMPLEMENT_SERIAL(CDockState, CObject, 0)
MFC\SRC\LIST_O.CPP(434):IMPLEMENT_SERIAL(CObList, CObject, 0)
MFC\SRC\LIST_S.CPP(462):IMPLEMENT_SERIAL(CStringList, CObject, 0)
MFC\SRC\MAP_SO.CPP(390):IMPLEMENT_SERIAL(CMapStringToOb, CObject, 0)
MFC\SRC\MAP_SS.CPP(394):IMPLEMENT_SERIAL(CMapStringToString, CObject, 0)
MFC\SRC\MAP_WO.CPP(369):IMPLEMENT_SERIAL(CMapWordToOb, CObject, 0)
MFC\SRC\OLEDOC1.CPP(872):IMPLEMENT_SERIAL(CDocItem, CCmdTarget, 0)
MFC\SRC\VIEWRICH.CPP(2140):IMPLEMENT_SERIAL(CRichEditCntrItem, COleClientItem, 0)

Это и есть список классов, которые вы можете выудить из m_classList.
Не густо.
Очевидно, это все, на что способен данный метод поиска RuntimeClassов.
Как видите, все логично. Несериализуемые классы (а таких в MFC, как видите, большинство) не регистрируют себя в списке.

Z>Dump of all classes:

Z> CDockState
Z> CMapWordToOb
Z> CMapStringToString
Z> CMapStringToOb
Z> CStringList
Z> CObList
Z> CWordArray
Z> CStringArray
Z> CObArray
Z> CDWordArray
Z> CByteArray

Теперь дальше. Попробуйте посмотреть на CRuntimeClass исходники и определить, регистрирует ли себя CRuntimeClass объект еще где-нибудь. Может, есть еще какой-нибудь список.
Хотите сказать 'спасибо'? Тогда поставьте оценку
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.