Может IXMLDOMElementPtr pElement- & gt; text = & quot; … & quot; потерпеть поражение?

Псевдокод выглядит следующим образом:

IXMLDOMElementPtr pElement;
pElement = pXMLDom->createElement("...");
pElement->text = "..."; // My question is can this step fail (such as because of memory restrain)?

Пожалуйста, помогите мне понять принцип внутренней работы оператора «=»! Я знаком с C, но новичок в C ++ / Java.

Спасибо!

1

Решение

Принцип внутренней работы оператора «=» основан на определенных расширениях Microsoft C ++ и не имеет ничего общего с устаревшей перегрузкой оператора C ++.

Увидеть свойство (C ++)

Когда компилятор видит член данных, объявленный с этим атрибутом на
право оператора выбора члена («.» или «->»), он преобразует
операция, чтобы получить или положить функцию, в зависимости от того, такой
выражение является l-значением или r-значением.

Когда вы используете #import импортировать определения COM из DLL (как MSXML?.DLL), создается файл TLH (заголовок C ++), который отражает содержимое библиотеки типов, связанной с библиотекой DLL.

В этом TLH вы найдете объявление для структуры IXMLDOMNodeнаследуя от IDispatchсо строками:

__declspec(property(get=Gettext,put=Puttext))
_bstr_t text;

Gettext а также Puttext методы определяются в файле TLI (встроенные функции), сгенерированном во время импорта.

Puttext методы это:

inline void IXMLElement::Puttext ( _bstr_t p ) {
HRESULT _hr = put_text(p);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
}

put_text Метод является необработанным вызовом через указатель интерфейса и, как всегда для вызовов такого рода, возвращает HRESULT, Так что да, теоретически этот шаг МОЖЕТ провалиться.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]