IXSLTemplate :: putref_stylesheet возвращает E_INVALIDARG - PullRequest
1 голос
/ 07 сентября 2010

Ну, я потерял несколько часов ...

IXSLTemplate::putref_stylesheet не документирует никаких ошибок, кроме E_FAIL.

Однако в моем случае putref_stylesheet возвращает E_INVALIDARG. GetErrorInfo() является только излишним, говоря мне, что «Аргумент недействителен». Так что мне не осталось много информации.

Однако мой код довольно близок ко всем примерам, которые я нашел в Интернете и MSDN. И это что-то вроде:

void xsltProcessing(MSXML2::IXMLDOMDocument* pXmlDoc, MSXML2::IXMLDOMDocument * pXslDoc)
{
    IXSLTemplatePtr pTemplate;
    pTemplate.CreateInstance( _T( "Msxml2.XSLTemplate" ));
    pTemplate->putref_stylesheet(pXslDoc);
    //...
}

Поскольку документации для putref_stylesheet не так много. У вас есть идея, что может пойти не так, чтобы он вернул E_INVALIDARG?

Мой pXslDoc - это IXMLDOMDocument Я успешно загрузил из статических константных строк.

Есть подсказка? (Я думаю, это довольно расплывчатый вопрос, но я искал часы)

1 Ответ

1 голос
/ 07 сентября 2010

Вы загружаете pXslDoc возможно асинхронно?

Поведение по умолчанию для IXMLDOMDocument объектов - асинхронная загрузка, поэтому возможно, что pXslDoc не завершил загрузку при вызове putref_stylesheet().

Добавление следующего кода перед загрузкой pXslDoc решит эту проблему, если вы страдаете от этого:

pXslDoc->put_async(VARIANT_FALSE);
...