Используется для динамического создания объекта. Например, когда Вы читаете объект с диска. Кроме того у Вас появляется возможность создания объекта без использования оператора new, а пользуясь функцией CreateObject класса CRuntimeClass.
DECLARE_DYNCREATE( имя класса ) IMPLEMENT_DYNCREATE( имя класса,имя класса родителя ) // Фактическое название без кавычек
В описании класса указываем макрокоманду DECLARE_DYNCREATE, а в реализации IMPLEMENT_DYNCREATE. Вот так:
class CMyObject : public CObject { protected: DECLARE_DYNCREATE(CMyObject) }; IMPLEMENT_DYNCREATE(CMyObject,CObject);
Так как для динамического создания необходима информация о типе класса, то макросы DECLARE_DYNAMIC и IMPLEMENT_DYNAMIC определяются внутри DECLARE_DYNCREATE и реализации IMPLEMENT_DYNCREATE - это абсолютно логическое утверждение подтверждено и в исходном коде.
#define IMPLEMENT_DYNAMIC(class_name, base_class_name) \ IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, NULL) #define IMPLEMENT_DYNCREATE(class_name, base_class_name) \ CObject* PASCAL class_name::CreateObject() \ { return new class_name; } \ IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, \ class_name::CreateObject)