Avatar billede spanning Nybegynder
26. januar 2005 - 17:06

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;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester