Привет Народ!
У меня сложилась следующая проблема. Есть out-of-process сервер COM (выполнен в exe-шнике) pmpC4PM.pmpCPMPostProcessor.1
Работает все в следующем скрипте на JScript:
var pmpost = new ActiveXObject("pmpC4PM.pmpCPMPostProcessor.1");
pmpost.Hello();
var xml_cldata = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
xml_cldata.setProperty("NewParser",true);
xml_cldata.setProperty("SelectionLanguage","XPath");
xml_cldata.setProperty("SelectionNamespaces", "xmlns=''");
var cxm_path = "D:\\projects\\dicc00218\\pmpost\\sys\\exec\\test_drill.cxm";
var fso = new ActiveXObject("Scripting.FileSystemObject");
var cxmfile = fso.OpenTextFile(cxm_path, 1); // 1 - for reading
var cxmtext = cxmfile.ReadAll();
cxmfile.Close();
xml_cldata.loadXML(cxmtext);
// здесь selectSingleNode РАБОТАЕТ !!!!
var sss = xml_cldata.selectSingleNode("/PROGRAM");
WScript.Echo(sss.nodeName);
pmpost.OptionFile = "D:\\projects\\dicc00218\\pmpost\\sys\\exec\\Fanuc.pmopt";
pmpost.SourceFileDocument = xml_cldata;
Однако внутри COM объекта selectSingleNode отказывается работать
STDMETHODIMP pmpPMPostProcessor::put_SourceFileDocument(IDispatch* a_p_idisp)
{
HRESULT hr;
a_p_idisp->QueryInterface(
MSXML2::IID_IXMLDOMDocument2,
(void**)&m_cp_xml_doc);
//////////////
CComPtr<MSXML2::IXMLDOMNode> m_comptr_current_node;
// ЭТО НЕ РАБОТАЕТ !!!
hr = m_cp_xml_doc->selectSingleNode(L"/PROGRAM",&m_comptr_current_node);
// ЭТО РАБОТАЕТ!!!
BSTR bstr_xml;
m_cp_xml_doc->get_xml(&bstr_xml);
//////////////
return hr;
}
Возможно это какие-то проблемы с маршаллингом... Помогите, пожалуйста, кто может!
Заранее спасибо!