br> m_pSystemDomain = new (&g_pSystemDomainMemory) SystemDomain(); if(m_pSystemDomain == NULL) return COR_E_OUTOFMEMORY; // 初始化 SystemDomain 对象 HRESULT hr = m_pSystemDomain->BaseDomain::Init(); // Setup the memory heaps if(FAILED(hr)) return hr; m_pSystemDomain->GetInterfaceVTableMapMgr().SetShared(); // 构造缺省的 AppDomain hr = m_pSystemDomain->CreateDefaultDomain(); if(FAILED(hr)) return hr; // 构造 SharedDomain hr = SharedDomain::Attach(); return hr; } 值得注意的是,为了让 SystemDomain 的构造不会失败,SystemDomain 及其基类 BaseDomain 的构造函数都为空,而初始化代码放到 Init 方法中完成,CLR 中很多类型的代码都使用类似的模式将构造和初始化分离以保障构造成功。BaseDomain::Init 函数在 SystemDomain::Attach 中直接被调用以初始化 SystemDomain 的父类;SystemDomain::Init 函数则在上面提到的 EEStartup 函数末尾才被调用页码:[1] [2] [3] [4] [5] [6] [7] [8] [9] 第7页、共9页 |