Hi Nikolay,
On 2/14/11 9:04 PM, Nikolay Sivov wrote:
Basic put_input() method for IXSLProcessor
+ IXMLDOMNode *old_input = This->input; + HRESULT hr;
- FIXME("(%p): stub\n", This); - return E_NOTIMPL; + TRACE("(%p)->(type=%d)\n", This, V_VT(&input)); + + /* try IXMLDOMNode directly first */ + if (V_VT(&input) == VT_UNKNOWN) + hr = IUnknown_QueryInterface(V_UNKNOWN(&input),&IID_IXMLDOMNode, (void**)&This->input); + else if (V_VT(&input) == VT_DISPATCH) + hr = IDispatch_QueryInterface(V_DISPATCH(&input),&IID_IXMLDOMNode, (void**)&This->input); + + if (hr != S_OK) + { + IXMLDOMDocument *doc; + + hr = DOMDocument_create(&CLSID_DOMDocument, NULL, (void**)&doc); + if (hr == S_OK) + { + hr = IXMLDOMDocument_QueryInterface(doc,&IID_IXMLDOMNode, (void**)&This->input); + IXMLDOMDocument_Release(doc); + } + } + + if (hr == S_OK&& old_input) IXMLDOMNode_Release(old_input);
Failure of QueryInterface call will set This->input to NULL (you probably want it not changed and even if not, that's a leak). It's probably better idea to have local pointer to the new input instead of old one and change it once you know the function will succeed.
Jacek
On 2/15/11 4:53 PM, Jacek Caban wrote:
Hi Nikolay,
On 2/14/11 9:04 PM, Nikolay Sivov wrote:
Basic put_input() method for IXSLProcessor
+ TRACE("(%p)->(type=%d)\n", This, V_VT(&input));
I missed it in my previous mail, but we have debugstr_variant for this in msxml3 now.
Jacek
On 2/15/2011 18:53, Jacek Caban wrote:
Hi Nikolay,
On 2/14/11 9:04 PM, Nikolay Sivov wrote:
Basic put_input() method for IXSLProcessor
- IXMLDOMNode *old_input = This->input;
- HRESULT hr;
- FIXME("(%p): stub\n", This);
- return E_NOTIMPL;
- TRACE("(%p)->(type=%d)\n", This, V_VT(&input));
- /* try IXMLDOMNode directly first */
- if (V_VT(&input) == VT_UNKNOWN)
hr =
IUnknown_QueryInterface(V_UNKNOWN(&input),&IID_IXMLDOMNode, (void**)&This->input);
- else if (V_VT(&input) == VT_DISPATCH)
hr =
IDispatch_QueryInterface(V_DISPATCH(&input),&IID_IXMLDOMNode, (void**)&This->input);
- if (hr != S_OK)
- {
IXMLDOMDocument *doc;
hr = DOMDocument_create(&CLSID_DOMDocument, NULL, (void**)&doc);
if (hr == S_OK)
{
hr = IXMLDOMDocument_QueryInterface(doc,&IID_IXMLDOMNode,
(void**)&This->input);
IXMLDOMDocument_Release(doc);
}
- }
- if (hr == S_OK&& old_input) IXMLDOMNode_Release(old_input);
Failure of QueryInterface call will set This->input to NULL (you probably want it not changed and even if not, that's a leak). It's probably better idea to have local pointer to the new input instead of old one and change it once you know the function will succeed.
Right, another thing is that I don't load a document from input variant.
Jacek