Сущность технологии СОМ. Библиотека программиста :: Бокс Дональд
Страница:
467 из 528
Методу генератора Skip нужно просто генерировать и отбрасывать запрошенное количество элементов:
STDMETHODIMP PrimeGenerator::Skip(ULONG cElems) {
ULONG cEaten = 0; while (cEaten < cElems && m_nCurrentPrime <= m_nMax) {
m_nCurrentPrime = GetNextPrime(m_nCurrentPrime);
cEaten++; }
return cEaten == cElems ? S_OK : S_FALSE;
}
Метод Reset устанавливает курсор на начальное значение:
STDMETHODIMP PrimeGenerator::Reset(void) {
m_nCurrentPrime = m_nMin;
return S_OK;
}
а метод Clone создает новый генератор простых чисел на основе минимума, максимума и текущих значений, выданных существующим генератором:
STDMETHODIMP PrimeGenerator::Clone(IEnumLong **ppe) {
assert(ppe);
*рре = new PrimeGenerator(m_nMin, m_nMax, m_nCurrent);
if (*ppe) (*ppe)->AddRef();
return S_OK;
}
При наличии реализации PrimeGenerator реализация метода GetPrimes текущим объектом становится тривиальной:
STDMETHODIMP MyClass::GetPrimes(long nМin, long nMax, IEnumLong **ppe) {
assert(ppe);
*ppe = new PrimeGenerator (nMin, nMax, nMin);
if (*ppe) (*ppe)->AddRef();
return S_OK;
}
Большая часть этой реализации находится теперь в классе PrimeGenerator , а не в классе объекта.
Динамический вызов в сравнении со статическим
До сих пор говорилось о том, что СОМ основан на клиентских программах, имеющих на этапе разработки предварительную информацию об определении интерфейса. Это достигается либо через заголовочные файлы C++ (для клиентов C++), либо через библиотеки типов (для клиентов Java и Visual Basic). В общем случае это не представляет трудностей, так как программы, написанные на этих языках, перед употреблением обычно проходят фазу какой-либо компиляции. Некоторые языки не имеют такой фазы компиляции на этапе разработки и вместо этого распространяются в исходном коде с тем, чтобы интерпретироваться во время выполнения. Вероятно, наиболее распространенными среди таких языков являются языки сценариев на базе HTML (например, Visual Basic Script, JavaScript), которые выполняются в контексте Web-броузера или Web-сервера. В обоих этих случаях текст сценариев вкладывается в его исходном виде в файл HTML, а окружающая исполняемая программа выполняет текст сценариев «на лету», по мере анализа HTML. С целью обеспечить разнообразную среду программирования эти окружения позволяют сценариям вызывать методы СОМ-объектов, которые могут создаваться в самом тексте сценария или где-нибудь еще в HTML-потоке (например, какой-либо управляющий элемент, который является также частью Web– страницы).
|< Пред. 465 466 467 468 469 След. >|