2014-01-09 4 views
1

의사 코드는 다음과 같습니다 :IXMLDOMElementPtr pElement-> text = "..."이 (가) 실패 할 수 있습니까?

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

더는 나를 "="연산자의 내부 작동 원리를 이해하는 데 도움이 바랍니다! 저는 C에 익숙하지만 C++/Java의 초보자입니다.

감사합니다.

답변

0

"="연산자의 내부 작업 원칙은 특정 Microsoft C++ 확장을 기반으로하며 레거시 C++ 연산자 오버로드와는 아무 관련이 없습니다. 그것은에 조작 변환 -, 컴파일러가 구성원 선택 연산자의 오른쪽 (".", ">"또는) 에이 속성 선언 된 데이터의 부재를 감지하면

property (C++)

보기 그러한 표현식이 l- 값인지 r- 값인지에 따라 get 또는 put 함수를 호출합니다.

당신의 (a MSXML?.DLL 등) DLL에서 COM 정의를 가져올 #import를 사용

하는 TLH 파일 (A C++ 헤더)는 DLL과 관련된 형식 라이브러리의 내용을 반영하는 생성됩니다. 당신이 라인, IDispatch에서 상속, 구조체 IXMLDOMNode에 대한 선언을 찾을 것 TLH에서

:

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

GettextPuttext 방법은 TLI 파일 (인라인 함수) 정의, 동안 생성 수입. 항상 통화의 종류를 들어, HRESULT를 반환으로,

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

put_text 방법은 인터페이스 포인터를 통해 원시 호출하고, :

Puttext 방법이다. 그렇습니다. 이론 상으로는이 단계가 실패 할 수 있습니다.