Fejl: ved brug af TransformNodeToObject på NT/2000
Hej,Jeg bruger TransformNodeToObject til at transformerer xml dokumenter til html. TransformNodeToObject præservere tegnsæt eller følger foreskrifterne i xsl:output encoding i modsætning til TransformNode, så derfor SKAL jeg bruge denne.
Problemet er at det fungere fint på en XP maskine men IKKE på win2000 hvor jeg får en exception med beskrivelsen 'Incorrect parameter' - jeg har snuset lidt rundt på nettet og har fundet frem til at den fejl kan opstå når man blander versioner er XMLDomDocument. Jeg har imidlertidigt checket dette og det gøres korrekt - vil jeg mene. Så jeg har intet clue whatsoever ... så vil sætte stor pris på en hjælp.
her er koden der forudsager fejlen:
::CoInitialize(NULL);
// load files
MSXML2::IXMLDOMDocumentPtr xml;
MSXML2::IXMLDOMDocument2Ptr xsl;
xml.CreateInstance("MSXML2.DOMDocument.4.0");
xsl.CreateInstance("MSXML2.DOMDocument.4.0");
if (!xml->load((_bstr_t) argv[1])) {
printf("Error loading '%s'.\n\n%s",argv[1],
(char*)((_bstr_t) xml->GetparseError()->reason));
exit(-2);
}
if (!xsl->load((_bstr_t) argv[2])) {
printf("Error loading '%s'.\n\n%s",argv[2],
(char*)((_bstr_t) xsl->GetparseError()->reason));
exit(-3);
}
// open output stream
//apply the transformation
_StreamPtr pStm(__uuidof(Stream));
_variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
pStm->raw_Open(
varOptional,
adModeUnknown,
adOpenStreamUnspecified,
NULL,
NULL);
pStm->Type = adTypeText;
pStm->Charset = "US-ASCII";
VARIANT vObject;
IDispatch *pDisp;
TESTHR(pStm->QueryInterface(IID_IDispatch, (void**)&pDisp));
vObject.vt = VT_DISPATCH;
vObject.pdispVal = pDisp;
xsl->async = false;
try {
TESTHR(xml->transformNodeToObject(xsl,&vObject));
}
catch (_com_error& e) {
_bstr_t d = e.ErrorMessage();
_bstr_t f = e.Description();
printf("xml->transformNodeToObject(xsl,&vObject):\n%s\n%s\n",(char*) d, (char*) f);
exit(-4);
}
try {
TESTHR(pStm->SaveToFile(argv[3],adSaveCreateOverWrite));
}
catch (_com_error& e) {
_bstr_t d = e.ErrorMessage();
_bstr_t f = e.Description();
printf("pStm->SaveToFile(argv[3],adSaveCreateOverWrite):\n%s\n%s\n",(char*) d, (char*) f);
exit(-4);
}
return 0;
