Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.05.2011, 20:12
hatsub hatsub вне форума
Прохожий
 
Регистрация: 12.03.2011
Сообщения: 18
Репутация: 10
По умолчанию Объясните про IUnknown

PHP код:
xmldomdocument:=(IUnknown(XMLHTTP.responseXML) as IXMLDOMDocument); 

Похоже не знаю самого элементарного, объясните по русски что делает это строка кода.

p.s. XMLHTTP содержит в себе код, полученный при get запросе к rss-ленте.
Ответить с цитированием
  #2  
Старый 09.05.2011, 20:24
Raskolnikov Raskolnikov вне форума
Прохожий
 
Регистрация: 20.04.2011
Адрес: Киров
Сообщения: 35
Версия Delphi: 7 Enterprise
Репутация: 148
По умолчанию

Операция as позволяет трактовать родительский класс (интерфейс) как один из его потомков. В данном случае XMLHTTP.responseXML приводится к базовому интерфейсу (IUnknown для иерархии интерфейсов играет ту же роль, что и TObject для иерархии классов). Затем операция as IXMLDOMDocument заставляет компилятор трактовать интерфейс типа IUnknown как один из его потомков - IXMLDOMDocument, именно этот тип имеент интерфейс xmldomdocument.
Ответить с цитированием
  #3  
Старый 09.05.2011, 20:42
hatsub hatsub вне форума
Прохожий
 
Регистрация: 12.03.2011
Сообщения: 18
Репутация: 10
По умолчанию

Пожалуйста, объясните еще более русским языком.
Ответить с цитированием
  #4  
Старый 09.05.2011, 21:57
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Тов. Раскольников. Учите матчасть. Для интерфейсов операция as есть ни что иное как вызов QueryInterface.

Теперь по сути.
В данном куске кода производится получение интерфейса IXMLDOMDocument (ссылки на объект с определенным интерфейсом, то бишь набором методов). Возможно, в интерфейсе по умолчанию объекта XMLHTTP.responseXML недоступны методы, позволяющие получить другой интерфейс. Но т.к. любой интерфейс по сути наследник IUnknown (тут не совсем так, но для понимания это не принципиально), то для корректного вызова производится принудительное преобразование интерфейса к IUnknown.
Ответить с цитированием
  #5  
Старый 10.05.2011, 09:09
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

следующие 2 строки кода эквивалентны:
Код:
    XMLDOMDocument:=XMLHttpRequest.responseXML as IXMLDOMDocument;

    XMLHttpRequest.responseXML.QueryInterface(IXMLDOMDocument, XMLDOMDocument);

и

Код:
  XMLHttpRequest:=CreateComObject(CLASS_XMLHTTPRequest) as IXMLHttpRequest;

  CreateComObject(CLASS_XMLHTTPRequest).QueryInterface(IXMLHttpRequest, XMLHttpRequest);

код можно чуть упростить:
Код:
var
  XMLHttpRequest: IXMLHttpRequest;
  XMLDOMDocument: IXMLDOMDocument;
begin
  XMLHttpRequest:=CreateComObject(CLASS_XMLHTTPRequest) as IXMLHttpRequest;
  XMLHttpRequest.open('GET', 'http://www.delphisources.ru/forum/external_mod.php?type=RSS2', False, '', '');
  XMLHttpRequest.send('');
  if XMLHttpRequest.status=200 then
  begin
    XMLDOMDocument:=XMLHttpRequest.responseXML as IXMLDOMDocument;
//    XMLHttpRequest.responseXML.QueryInterface(IXMLDOMDocument, XMLDOMDocument);
  end;
end;
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 10.05.2011 в 09:12.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:21.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025