Переменная m_plMeshBld инициализируется при конструировании
Переменная m_plMeshBld инициализируется при конструировании объекта C3dShape:
C3dShape::C3dShape() (
m_pIVisual = NULL;
C3dFrame::Create(NULL) ;
ASSERT(m_pIFrame) ;
m_pIFrame->SetAppData((OLONG)this) ;
Создание фигур '"^l
57
m strName = «3D Shape»;
m^pIMeshBId = NULL;
the3dEngine.CreateMeshBuilder(&m_pIMeshBld);
ASSERT(m_pIMeshBld) ;
AttachVisual(m_pIMeshBld) ;
}
Глобальный объект the3dEngine пользуется некоторыми глобальными функциями Direct3D для создания различных интерфейсов трехмерной графики. Чтобы вы не подумали, будто я от вас что-то скрываю, покажу, откуда возникает интерфейс IRLMeshBuilder:
BOOL C3dEngine::CreateMeshBuilder(IDirect3DRMMeshBuilder**
pIBId)
(
ASSERT(m_pIWRL) ;
ASSER'. 'oIBId) ;
m_hr = m_pIWRL->CreateMeshBuilder(pIBld) ;
if (FAILED(m_hr)) return FALSE;
ASSERT(*pIBld);
return TRUE;
Пока я не стану объяснять, откуда берется значение m_plWRL, но вы наверняка уловили общий принцип: обращения к СОМ-интерфейсам мало чем отличаются от вызовов функций объектов в C++. Сходство настолько велико, что я использую префикс р1 для СОМ-интерфейсов. Чтобы понять отличия между ними, давайте посмотрим, что происходит с указателями на СОМ-интерфейсы при уничтожении объекта C3dShape:
C3dShape : : --C3dShape () {
if (m_pIVisual) m_pIVisual->Release() ;
if (m_pIMeshBld) m_pIMeshBld->Release();
m ImgList.DeieteAll () ;
Как видите, наши действия сильно отличаются от обычного удаления объектов по указателям. Завершая работу с СОМ-интерфейсом, вы обязаны вызвать его функцию Release, чтобы уменьшить значение его счетчика обращений. Если не сделать этого, то СОМ-объект будет жить в памяти вечно.
Напоследок я бы хотел сделать одно замечание, относящееся к вызову функций из конструкторов объектов C++. Как нетрудно догадаться, попытка создать интерфейс внутри конструктора может кончиться неудачей — чаще всего это происходит из-за нехватки памяти. В своей программе я даже не пытаюсь обнаружить такую ситуацию. Проблемы с памятью вызывают исключение, которое, как я надеюсь, будет перехвачено в вашей программе! Конечно, с моей стороны
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий