Probleme mit OLE-Automation unter MFC



  • Hallo,
    ich habe ein MFC-Projekt mit Wrapperklassen aus der Type-Library (11.0) geerbt, was zum
    Erstellen, Öffnen und zum Speichern von Worddokumenten genutzt wird. Das hat auch funktioniert bis zu Office 2010 (unter XP und Windows 7).
    Ich scheitere (auch mit der Microsoft Word 14.0 ObjectLibrary) am SaveAs für docx (für doc geht es auch weiterhin) mit der Fehlermeldung "Dateityp und Dateierweiterung sind nicht kompatibel."
    In den von mir genutzen Klassen (Funtionen) gibt es keine Unterschiede zu den Parametern der "alten" TypeLibrary.

    Mache ich das Dokument nach dem Bearbeiten "visible" und speichere mit Hand,
    ist es ein docx.

    //Anlegen
    		COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);
    		COleVariant vFile("d:\\vorlage.dot");
    		Documents wordDocs(m_wordApp->get_Documents());
    		m_wordDocs.Add(vFile, vOpt,vOpt,vOpt);
    //...
    //speichern
    		_Document act_doc=myWordApp->get_ActiveDocument();
    		COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    		COleVariant vTrue((short)TRUE);
    		COleVariant vFalse((short)FALSE);
    		COleVariant vFile("d:\\test.docx");
    		COleVariant vFormat((short)0);
    		try{
    			act_doc.SaveAs(	vFile,
    					vFormat,	//FileFormat
    					vFalse,		//LockComments
    					vOpt,		//Password
    					vTrue,		//AddToRecentFiles
    					vOpt,		//WritePassword
    					vFalse,		//ReadOnlyRecommended
    					vFalse,		//EmbedTrueTypeFonts
    					vFalse,		//SaveNativePictureFormat
    					vFalse,		//SaveFormsData
    					vFalse,		//SaveAsAOCELetter
    					vOpt,		//Encoding, 
    					vOpt,		//InsertLineBreaks, 
    					vOpt,		//AllowSubstitutions, 
    					vOpt,		//LineEnding, 
    					vOpt);		//AddBiDiMarks
    		}
    		catch(COleDispatchException *pOleDispatchException)
    		{
    			char buf[255];
    			pOleDispatchException->GetErrorMessage((LPTSTR)buf, 255); //-->hier der Fehler: 
    			//...
    		}
    

    Gibt es eine gute Quelle, wo ich was zu den ganzen Parametern nachlesen kann?
    Visual Basic hilft mir da nicht wirklich weiter.
    Danke!



  • Dein vTrue und vFalse kommen mir komisch vor. Du gibst den Typ nicht an, also sind es per defaultparameter VT_I2 statt VT_BOOL. Außerdem löst TRUE (zumindest bei mir) nach 1 auf, während bei VARIANT_BOOL nur -1 als wahr gilt (siehe auch http://blogs.msdn.com/b/oldnewthing/archive/2004/12/22/329884.aspx).



  • Dein vTrue und vFalse kommen mir komisch vor

    Das stammt aus der MSDN für Office 2000.

    Edit: Ich habe jetzt zum Test ein C#-Projekt aufgesetzt und dort in der Hilfe die Member für SaveAs gefunden. Fileformat war falsch. Leider ist C# nicht die Lösung für mein Projekt. Aber wenigstens kommt man so an die Parameter.


Anmelden zum Antworten