BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: hook3(); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
void test1() { Memo1 obj1; Memo1 obj2; Memo1 obj3; ObjMaster master1(obj1,"obj1"); ObjMaster master2(obj2,"obj2"); ObjMaster master3(obj3,"obj3"); ObjMaster_delete master4(new Memo2(),"obj4"); ObjMaster_delete master5(new Memo2(),"obj5"); ObjHook hook1("obj1"); ObjHook hook2("obj2"); ObjHook hook3("obj3"); ObjHook hook4("obj4"); ObjHook hook5("obj5"); Putch(Con,'\n'); Memo1::Show(hook1.cast<Memo1>()); Memo1::Show(hook2.cast<Memo1>()); Memo1::Show(hook3.cast<Memo1>()); Memo1::Show(hook4.cast<Memo1>()); Memo1::Show(hook5.cast<Memo1>()); Putch(Con,'\n'); { ObjHost::List<ObjInfo> list; list.build(); Show("ObjInfo",Range(list)); } { ObjHost::List<ObjInfo_obj> list; list.build(); Show("ObjInfo_obj",Range(list)); } { ObjHost::List<ObjInfo_if<Memo1> > list; list.build(); Show("ObjInfo_if",Range(list)); } { ObjHost::List<ObjInfo_obj_if<Memo2> > list; list.build(); Show("ObjInfo_obj_if",Range(list)); } }