Псевдокод выглядит следующим образом:
IXMLDOMElementPtr pElement;
pElement = pXMLDom->createElement("...");
pElement->text = "..."; // My question is can this step fail (such as because of memory restrain)?
Пожалуйста, помогите мне понять принцип внутренней работы оператора «=»! Я знаком с C, но новичок в C ++ / Java.
Спасибо!
Принцип внутренней работы оператора «=» основан на определенных расширениях 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
, Так что да, теоретически этот шаг МОЖЕТ провалиться.
Других решений пока нет …