none
erreur WordManager.h(60): error C3280: RRS feed

  • Question

  • /*******************************************************************************
     * NOM: WordManager.h
     * ROLE:
     * HISTORIQUE:
        * 05/05/2001, yab, initial version
    *******************************************************************************/
    #ifndef WORDMANAGER_H
    #define WORDMANAGER_H
    /*_____INCLUDE-FILES__________________________________________________________*/
    /*_____GLOBAL-DEFINE__________________________________________________________*/
    /*_____GLOBAL-TYPES___________________________________________________________*/
    /*_____GLOBAL-DATA____________________________________________________________*/
    /*_____GLOBAL-MACROS__________________________________________________________*/
    /*_____GLOBAL-FUNCTIONS-PROTOTYPES____________________________________________*/
    	enum
    	{
    		START_READER = 1,
    		STOP_READER,
    		OPEN_DOCUMENT,
    		CLOSE_DOCUMENT,
    		INITIALIZE_POINT_BLOC,
    		READ_BLOC,
    		GO_NEXT_BLOC
    	};
    /*_____CLASS-DEFINITION_______________________________________________________*/
    namespace SpecificationLoader
    {
        using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::IO;
    	using namespace System::Runtime::InteropServices;
    	namespace Word = Microsoft::Office::Interop::Word;
    
    	public ref class CWManager
    	{
    	public:
    		CWManager::CWManager();
    		CWManager::~CWManager();
    		void CWManager::OnDocumentOpen(void);
    		static Word::Application^ objApplication = gcnew Word::Application;
    		static Word::Document^ objDocument = gcnew Word::Document;
    		static Word::Documents^ objDocuments = objApplication->Documents;
    		static Word::Paragraphs^ objParagraphs;
    		static Word::Paragraph^ objParagraph;
    //		property objParagraph->Format^ ParagraphFormat;
    		erc CWManager::GetNbWords();
    		erc CWManager::StartWordApi();
    		erc CWManager::StopWordApi();
    		erc CWManager::OpenWordDocument(std::wstring wsFullPathName/*, Word::Application^ objApplication, Word::Document^ objDocument, Word::Documents^ objDocuments*/);
    		static void CWManager::StartDocAnalysis( System::ComponentModel::BackgroundWorker^  backgroundWorker1, long ulNbWord, bool bNewDoc/*, Word::Application^ objApplication, Word::Document^ objDocument, Word::Documents^ objDocuments*/);
    		void CWManager::StartCoherenceAssertion( System::ComponentModel::BackgroundWorker^  backgroundWorker1, long ulNbWord );
    		static void CWManager::CloseDocument( System::ComponentModel::BackgroundWorker^  backgroundWorker1, Word::Application^ objApplication, Word::Document^ objDocument, Word::Documents^ objDocuments);
    		erc CWManager::InitializePointBloc(bool & bIsTextEmpty);
    		erc CWManager::ReadBloc(CBloc *pBloc);
    		erc CWManager::GoNextBloc(bool & bIsEndOfText);
    	};
    };
    #endif

    J'ai un message d'erreur que je ne comprend pas sur ce fichier: Je ne sais pas ce que c'est que cette fonction Dispose

    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3280: 'SpecificationLoader::CWManager::Dispose' : une fonction membre d'un type managé ne peut pas être compilée comme fonction non managée
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(void)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3642: 'void SpecificationLoader::CWManager::Dispose(bool)' : impossible d'appeler une fonction avec la convention d'appel __clrcall à partir du code natif
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(void)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3175: 'SpecificationLoader::CWManager::Dispose' : impossible d'appeler une méthode de type managé à partir d'une fonction non managée 'SpecificationLoader::CWManager::Dispose'
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(void)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3821: 'System::GC' : impossible d'utiliser un type ou une fonction managée dans une fonction non managée
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(void)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3821: 'System::GC::SuppressFinalize' : impossible d'utiliser un type ou une fonction managée dans une fonction non managée
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(void)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3821: 'this' : impossible d'utiliser un type ou une fonction managée dans une fonction non managée
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(void)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3642: 'void System::GC::SuppressFinalize(System::Object ^)' : impossible d'appeler une fonction avec la convention d'appel __clrcall à partir du code natif
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(void)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3175: 'System::GC::SuppressFinalize' : impossible d'appeler une méthode de type managé à partir d'une fonction non managée 'SpecificationLoader::CWManager::Dispose'
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(void)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3821: 'void SpecificationLoader::CWManager::Dispose(void)' : impossible d'utiliser un type ou une fonction managée dans une fonction non managée
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(void)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3645: 'SpecificationLoader::CWManager::Dispose' : __clrcall ne peut pas être utilisé sur les fonctions compilées en code natif
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(void)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3280: 'SpecificationLoader::CWManager::Dispose' : une fonction membre d'un type managé ne peut pas être compilée comme fonction non managée
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(bool)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3821: 'SpecificationLoader::CWManager' : impossible d'utiliser un type ou une fonction managée dans une fonction non managée
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(bool)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3821: 'SpecificationLoader::CWManager::~CWManager' : impossible d'utiliser un type ou une fonction managée dans une fonction non managée
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(bool)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3642: 'SpecificationLoader::CWManager::~CWManager(void)' : impossible d'appeler une fonction avec la convention d'appel __clrcall à partir du code natif
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(bool)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3175: 'SpecificationLoader::CWManager::~CWManager' : impossible d'appeler une méthode de type managé à partir d'une fonction non managée 'SpecificationLoader::CWManager::Dispose'
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(bool)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3821: 'System::Object' : impossible d'utiliser un type ou une fonction managée dans une fonction non managée
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(bool)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3821: 'System::Object::Finalize' : impossible d'utiliser un type ou une fonction managée dans une fonction non managée
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(bool)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3642: 'void System::Object::Finalize(void)' : impossible d'appeler une fonction avec la convention d'appel __clrcall à partir du code natif
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(bool)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3175: 'System::Object::Finalize' : impossible d'appeler une méthode de type managé à partir d'une fonction non managée 'SpecificationLoader::CWManager::Dispose'
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(bool)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3821: 'void SpecificationLoader::CWManager::Dispose(bool)' : impossible d'utiliser un type ou une fonction managée dans une fonction non managée
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(bool)' générée par le compilateur
    1>E:\usr\Memoria\dev\Linguistic\WordReader\com\WordManager.h(60): error C3645: 'SpecificationLoader::CWManager::Dispose' : __clrcall ne peut pas être utilisé sur les fonctions compilées en code natif
    1>          Le diagnostic s'est produit dans la fonction 'void SpecificationLoader::CWManager::Dispose(bool)' générée par le compilateur


    Jean Noël Martin

    dimanche 10 novembre 2013 17:30

Réponses

Toutes les réponses

  • #pragma managed
    #include "stdafx.h"
    #include "Event.h"
    #include "AlignStructure.h"
    #include "Macro.h"
    #include "Enumerations.hpp"
    #include "StructureM.h"
    #include "TypeDefsM.hpp"
    #include "POSM.h"
    #include "Layout.h"
    #include "ClassesAlignerManaged.hpp"
    #include "LinkDescription.h"
    #include "ParserManager.h"
    #include "Message.h"
    #include "StrConv.h"
    #include "Database.h"
    #include "InterbaseManager.h"
    #include "MissionDatabaseManager.h"
    #include "Chunker.h"
    #include "Ngramer.h"
    #include "Segmentation.h"
    #include "computingForAlignment.h"
    #include "AnnexFunctions.h"
    #include "WordManager.h"
    #include "Manager.h"
    #include "SchedulerGlobal.h"
    #include "Exception.h"
    #include "VirtualEquation.h"
    #include "BuildComponents.h"
    #include "MainMenue.h"
    extern std::wstring wsDiskOfTheFile;
    extern int nParagraph;
    extern int iIdDoc;
    extern int iSize;
    extern int iNbUnivers;
    extern int iNbPredicat;
    extern int iNbPrecondition;
    extern int iNbQualificateurs;
    extern std::string msg;

    class CMSWord
    {
    protected:
        IDispatch*    m_pWApp;
        IDispatch*  m_pDocuments;
        IDispatch*    m_pActiveDocument;
        IDispatch*  pDocApp;
        HRESULT        m_hr;
        HRESULT Initialize(bool bVisible=true);
    public:
        //Constructor creates a instance of object
        CMSWord();
        //Destructor
        ~CMSWord();
        //Sets visibility of active document
        HRESULT SetVisible(bool bVisible=true);
        //Quits the MS Word. Closes process
        HRESULT Quit();
        //Opens document and set document's visibility
        HRESULT OpenDocument(LPCTSTR szFilename, bool bVisible=true);
        //Open new empty document
        HRESULT NewDocument(bool bVisible=true);
        //Closes active document with or without saving
        HRESULT CloseActiveDocument(bool bSave=true);
        //Finds first next text in active document as specified
        HRESULT FindFirst(LPCTSTR szText);
        //Finds first next text in active document as specified. Returns false if end of document reached.
        bool FindFirstBool(LPCTSTR szText);
        //Close all documents
        HRESULT CloseDocuments(bool bSave=true);
        //Copies selected text into clipboard
        HRESULT Copy();
        //Pastes from Clipboard to active document
        HRESULT Paste();
        //Activate document by specified id
        HRESULT ActivateDocumentById(int id);
        //Returns number of opened documents in the process. There can be more MS Word processes, and the framework won't see documents controled by other processes.
        int CountDocuments();
        //Sets selected text. Replace it with specified text.
        HRESULT SetSelectionText(LPCTSTR szText);
        //Inserts picture from path specified in argument.
        HRESULT InserPicture(LPCTSTR szFilename);
        //Inserts text in active document.
        HRESULT InserText(LPCTSTR szText);
        // Inserts MS Word file into active document with all formating.
        HRESULT InsertFile(LPCTSTR szFilename);
        //Adds comment in ballon. Text is specified in argument
        HRESULT AddComment(LPCTSTR szComment);
        //Moves cursor. 2 is forward, 1 i backward. Selection is true then it selects text as it moves
        HRESULT MoveCursor(int nDirection=2,bool bSelection=false);
        //Delete char forward or backward
        HRESULT DeleteChar(bool bBack=false);
        //Sets bold for next inserted chars or for selected text.
        HRESULT SetBold(bool bBold=false);
        //Sets italic for next inserted chars or for selected text.
        HRESULT SetItalic(bool bItalic=false);
        //Sets underline for next inserted chars or for selected text.
        HRESULT SetUnderline(bool bUnderline=false);
        //Check spelling
        HRESULT CheckSpelling(LPCTSTR szWord, bool &bResult);
        //check grammer
        HRESULT CheckGrammer(LPCTSTR szString, bool &bResult);
        //sets font as specified
        HRESULT SetFont(LPCTSTR szFontName, int nSize, bool bBold, bool bItalic,COLORREF crColor);
        //Gets string of specified size
        //CString GetString(int nlenght);
        //Get selected string
        //CString GetSelectedString();
        //Saves file
        HRESULT SaveFile(LPCTSTR czFileName);
        HRESULT AlignJustify();
        HRESULT AlignLeft();
        HRESULT AlignRight();
        HRESULT AlignCenter();
    };

    extern std::wstring                                    wsDiskOfTheFile;
    extern std::string                                  sLogFile;
    extern std::string                                  sSavedLogFile;
    extern int                                          nParagraph;
    unsigned long ulNbWord;

    namespace SpecificationLoader
    {
        using namespace System;
        using namespace System::ComponentModel;
        using namespace System::Collections;
        using namespace System::Windows::Forms;
        using namespace System::Data;
        using namespace System::Drawing;
        using namespace System::Threading;
        using namespace System::IO;
        using namespace System::Runtime::InteropServices;
        using namespace msclr::interop;
    //    using namespace Microsoft::VisualBasic::MyServices;
        namespace Word = Microsoft::Office::Interop::Word;
        
        bool bonDocumentOpen;
        static int iNbIteration;
        extern erc ulTotalNbWords;
        CAnalysedSegment  *pSegment;
        
            CWManager::CWManager()
            {
            }

            CWManager::~CWManager()
            {
            }

            void CWManager::OnDocumentOpen(void)
            {
                bonDocumentOpen = true;
            }

            erc CWManager::GetNbWords()
            {
                return( ulNbWord);
            }
            
            erc CWManager::StartWordApi()
            {
                // Convenient values declared as ColeVariants.
                //COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
                // Get the IDispatch pointer and attach it to the objWord object.
                // objApplication->CreateDispatch("Word.Application");
                //Word::ApplicationEvents2_DocumentOpenEventHandler^ objWord;
                //SpecificationLoader::CWManager::OnDocumentOpen* ptrWord;
                bonDocumentOpen = false;
                //ptrWord = &SpecificationLoader::CWManager::OnDocumentOpen;
                //objWord += gcnew Word::ApplicationEvents2_DocumentOpenEventHandler( this, &SpecificationLoader::CWManager::OnDocumentOpen);
                return(0);
            }
            
            erc CWManager::StopWordApi()
            {
                return( 0);
            }
            
            
            

            erc CWManager::OpenWordDocument(std::wstring wsFullPathName/*, Word::Application^ objApplication, Word::Document^ objDocument, Word::Documents^ objDocuments*/)
            {
                bool m_bDocumentIsOpen;
                erc ErrorCode = INIT_NO_ERROR;
                int m_lNumberOfWords;
                enum OpenDocumentErrors
                {
                    CANT_OPEN_DOCUMENT = 1,
                    DOC_IS_NULL,
                };
                
                if( iNbIteration != 0)
                {
                    objApplication = gcnew Word::Application;
                    objDocument = gcnew Word::Document;
                    objDocuments = objApplication->Documents;
                }
                
                iNbIteration++;
                
                try
                {
                    
                    // public: Document^ Open( &Object^ FileName, &Object^ ConfirmConversions, &Object^ ReadOnly, &Object^ AddToRecentFiles, &Object^ PasswordDocument, &Object^ PasswordTemplate, &Object^ Revert, &Object^ WritePasswordDocument, &Object^ WritePasswordTemplate, &Object^ Format, &Object^ Encoding, &Object^ Visible, &Object^ OpenAndRepair, &Object^ DocumentDirection, &Object^ NoEncodingDialog, &Object^ XMLTransform);
                    // 1                        &Object^ FileName
                    // 2                                                &Object^ ConfirmConversions
                    // 3                                                       &Object^ ReadOnly
                    // 4                                                             &Object^ AddToRecentFiles
                    // 5                                                                    &Object^ PasswordDocument
                    // 6                                                                             &Object^ PasswordTemplate
                    // 7                                                                                      &Object^ Revert
                    // 8                                                                                               &Object^ WritePasswordDocument
                    // 9                                                                                                        &Object^ WritePasswordTemplate
                    // 10                                                                                                                &Object^ Format
                    // 11                                                                                                                      &Object^ Encoding
                    // 12                                                                                                                               &Object^ Visible
                    // 13                                                                                                                                      &Object^ OpenAndRepair
                    // 14                                                                                                                                              &Object^ DocumentDirection
                    // 15                                                                                                                                                       &Object^ NoEncodingDialog
                    // 16                                                                                                                                                                &Object^ XMLTransform
                    //objDocument = objDocument->Open( &wsFullPathName, false, true, false, false, nullptr, nullptr, nullptr, nullptr, false, nullptr, true, nullptr, nullptr, nullptr, nullptr);
                    bonDocumentOpen = true;
                    Object^ oFalse = false;
                    Object^ oTrue = true;
                    Object^ oNull = System::Reflection::Missing::Value;
                    ulNbWord = 0;
                    if( wsFullPathName.size() != 0)
                    {
                        Object^ oNomDocument = gcnew String( wsFullPathName.c_str());
                        while( bonDocumentOpen != true);
                        objDocument = objDocuments->Open( oNomDocument, oFalse, oTrue, oFalse, oNull, oNull, oNull,   oNull,   oNull,   oFalse,   oNull,   oTrue,  oNull,   oNull,   oNull,   oNull);
                        objDocument->Activate();
                        Word::Words^ objWords = objDocument->Words;
                        
                        m_lNumberOfWords = objWords->Count;
                        ulNbWord = m_lNumberOfWords;
                    }
                    else
                        ErrorCode = objStrConv.CreateReturnCode( TYPE_ERROR, MSG_CANT_OPEN_DOCUMENT,MODULE_ID_WORD_READER, MODULE_ID_WORD_READER, OPEN_DOCUMENT, DOC_IS_NULL);
                    if (ErrorCode == INIT_NO_ERROR)
                    {
                        m_bDocumentIsOpen = true;
                    }
                    return ( ulNbWord);
                }
                catch(...)
                {
                    return( -1);
                }
            }
                    
            void CWManager::StartDocAnalysis( System::ComponentModel::BackgroundWorker^  backgroundWorker1, long ulNbWord, bool bNewDoc/*, Word::Application^ objApplication, Word::Document^ objDocument, Word::Documents^ objDocuments*/)
            {                
                std::list<CAnalysedSegment*> *pListSegment;
                std::list<ElementSemantic*> listElementSemantic;
                erc ProgressPercentage;
                CBloc* pBloc;
                CLayout* pLayout;
                size_t iSize;
                int iStatus = 0;
                int i = 0;
                int j = 0;
                bool bStatus;
                Word::Words^ objWords;
                Word::Range^ objWord;
                int iTitle = 0;
                bool bTitle;
                
                try
                {
                    pListSegment = new std::list<CAnalysedSegment*>;
                    i = 0;
                    nParagraph = 0;
                    ulTotalNbWords = 0;
                    objParagraphs = objDocument->Paragraphs;
    //                String^ sDiskOfTheFile = marshal_as<String^>( wsDiskOfTheFile);
    //                String^ ssLogFile = sDiskOfTheFile + marshal_as<String^>( sLogFile);
    //                String^ ssSavedLogFile = sDiskOfTheFile + marshal_as<String^>( sSavedLogFile);
                    std::string sDiskOfTheFile = objStrConv.awcstombs((wchar_t*)wsDiskOfTheFile.c_str());
                    std::string ssLogFile = sDiskOfTheFile + sLogFile;
                    std::string ssSavedLogFile = sDiskOfTheFile + sSavedLogFile;
                    LPCTSTR lsLogFile = (LPCTSTR)ssLogFile.c_str();
                    LPCTSTR lsLogFileSaved = (LPCTSTR)ssSavedLogFile.c_str();
                    bStatus = CopyFile( lsLogFile, lsLogFileSaved, false);
                    LPTSTR lpszFunction = 0;
                    LPVOID lpMsgBuf;
                    LPVOID lpDisplayBuf;    
                    DWORD dw = GetLastError();
                    FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );
                    // Display the error message and exit the process
                    lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR));
                    StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d: %s"), lpszFunction, dw, lpMsgBuf);
                    iStatus = remove( ssLogFile.c_str());
                    for each( Word::Paragraph^ objParagraph in objParagraphs)
                    {
                        pBloc = new CBloc;
                        pLayout = new CLayout();
                        pBloc->pLayoutBloc = pLayout;
                        iTitle = 0;
                        System::String^ wsText = objParagraph->default->default;
                        // Récupérer les informations de Layout
                        // Word::Paragraph::Format::ParagraphFormat^ Format = objParagraph->Format->ParagraphFormat;
                        Object^ Style = objParagraph->Style;
                        //if( Style->WdBuiltinStyle == L"T")
                        //   objFormat = Format.get();
                        const wchar_t* chars = (const wchar_t*)(Marshal::StringToHGlobalUni( wsText)).ToPointer();
                        char* c = objStrConv.awcstombs( (wchar_t*)chars);
                        Marshal::FreeHGlobal(IntPtr((void*)chars));
                        wchar_t* cha = objStrConv.ambstowcs( c);
                        objStrConv.StrFreeA( c);
                        pBloc->wsBlocText.append( cha);
                        objWords = objDocument->Words;
                        iSize = ulTotalNbWords;
                        iSize += i + 1;
                        if( iSize < 4)
                            iSize = 3 + i;
                        for( j = iSize- 2 + i; j < iSize + 1; j++)
                        {
                            objWord = (Word::Range^)objWords[j];
                            if( objWord->Case == Word::WdCharacterCase::wdTitleSentence || objWord->Case == Word::WdCharacterCase::wdTitleWord)
                                iTitle += 10;
                            else
                                iTitle -= 2;
                            if(objWord->Font->Size < 13)
                                iTitle -= 5;
                            else
                                iTitle += 2;
                        }
                        if( iTitle > 0)
                            bTitle = true;
                        else
                            bTitle = false;
                        // appeler SchedulerGlobal pour traiter le paragraph.
                        iSize = pBloc->wsBlocText.size();
                        if( iSize > 2)
                        {
                            pBloc->pLayoutBloc->bTitle = bTitle;
                            ulTotalNbWords = objSchedulerGlobal.AnalyseBlocText( pBloc, pListSegment, ulTotalNbWords, bNewDoc);
                        }
                        else if( iSize > 0 && ProgressPercentage < 80)
                        {
                            // erreur une partie du texte n'a pas été traitée
                            string sProposition = objStrConv.awcstombs((wchar_t*)pBloc->wsBlocText.c_str());
                            string msg = "error: This text includes probably a control characther non appropriated : " + sProposition;
                            objStrConv.StrFreeA( (char*)sProposition.c_str());
                            throw Doc_exception ( msg.c_str(), nParagraph);
                        }
                        // il faut appeler le backgroundWorker1_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e)
                        ProgressPercentage = 100 * ulTotalNbWords / ulNbWord;
                        backgroundWorker1->ReportProgress( ProgressPercentage);
                        objStrConv.StrFreeW( cha);
                        if( i < 2)
                        {
                            i++;
                        }
                    }
                    ProgressPercentage = 100;
                    backgroundWorker1->ReportProgress( ProgressPercentage);
                    objVirtualEquations.CheckVirtualEquations( pListSegment);
                    CloseDocument( backgroundWorker1, objApplication, objDocument, objDocuments);
                    objSchedulerGlobal.ClearListGrammaire( pListSegment);
                    //backgroundWorker2->ReportProgress( ProgressPercentage);
                }
                catch(...)
                {
                }
            }

            
            void CWManager::StartCoherenceAssertion( System::ComponentModel::BackgroundWorker^  backgroundWorker1, long ulNbWord )
            {
                erc ProgressPercentage;
                std::list<QualificateurNormalized*>::iterator itQualificateur;
                std::list<QualificateurNormalized*>* pListQualificateurNormalized;
                std::list<ElementSemantic*>* pListElementSemantic;
                QualificateurNormalized* pQualificateur;
                CAnalysedSegment* pSegment;
                std::wstring wsText;

                pSegment = new CAnalysedSegment();
                ProgressPercentage = 100;
                pListElementSemantic = objMDBManager.ReadSemanticElements( iIdDoc);
                pSegment = objBuildComponents.GetElementsSemantics( pListElementSemantic);
                iNbUnivers = pSegment->pLinguisticSegment->ListUnivers.size();
                iNbPredicat =  pSegment->pLinguisticSegment->ListPredicat.size();
                iNbPrecondition =  pSegment->pLinguisticSegment->ListPrecondition.size();
                iNbQualificateurs =  pSegment->pLinguisticSegment->ListQualificatif.size();
                backgroundWorker1->ReportProgress( ProgressPercentage);
                // std::list<QualificateurNormalized*>* BuildComponents::reformeQualificateur( std::list<ElementSemantic*> listeQualificatif)
                pListQualificateurNormalized = objBuildComponents.reformeQualificateur( pSegment->pLinguisticSegment->ListQualificatif);
                iSize = pListQualificateurNormalized->size();
                itQualificateur = pListQualificateurNormalized->begin();
                while( itQualificateur != pListQualificateurNormalized->end())
                {
                    pQualificateur = *itQualificateur;
                    wsText = pQualificateur->Comment;
                    itQualificateur++;
                }
            }
            
            void CWManager::CloseDocument( System::ComponentModel::BackgroundWorker^  backgroundWorker1, Word::Application^ objApplication, Word::Document^ objDocument, Word::Documents^ objDocuments)
            {
                Object^ oNull = System::Reflection::Missing::Value;
                Object^ oFalse = false;
                Object^ oTrue = true;
                objDocuments->Close( oNull, oNull, oNull);
                Marshal::FinalReleaseComObject(objApplication);
                backgroundWorker1->ReportProgress( 100);
            }

            erc CWManager::InitializePointBloc(bool & bIsTextEmpty)
            {
                return(0);
            }
            erc CWManager::ReadBloc(CBloc *pBloc)
            {
                return(0);
            }
            erc CWManager::GoNextBloc(bool & bIsEndOfText)
            {
                return(0);
            }
    }

    Jean Noël Martin

    mardi 12 novembre 2013 09:17
  • #pragma managed
    #include "stdafx.h"
    #include "Event.h"
    #include "AlignStructure.h"
    #include "Macro.h"
    #include "Enumerations.hpp"
    #include "StructureM.h"
    #include "TypeDefsM.hpp"
    #include "POSM.h"
    #include "Layout.h"
    #include "ClassesAlignerManaged.hpp"
    #include "LinkDescription.h"
    #include "ParserManager.h"
    #include "Message.h"
    #include "StrConv.h"
    #include "Database.h"
    #include "InterbaseManager.h"
    #include "MissionDatabaseManager.h"
    #include "Chunker.h"
    #include "Ngramer.h"
    #include "Segmentation.h"
    #include "computingForAlignment.h"
    #include "AnnexFunctions.h"
    #include "WordManager.h"
    #include "Manager.h"
    #include "SchedulerGlobal.h"
    #include "Exception.h"
    #include "VirtualEquation.h"
    #include "BuildComponents.h"
    #include "MainMenue.h"
    extern std::wstring wsDiskOfTheFile;
    extern int nParagraph;
    extern int iIdDoc;
    extern int iSize;
    extern int iNbUnivers;
    extern int iNbPredicat;
    extern int iNbPrecondition;
    extern int iNbQualificateurs;
    extern std::string msg;

    class CMSWord
    {
    protected:
        IDispatch*    m_pWApp;
        IDispatch*  m_pDocuments;
        IDispatch*    m_pActiveDocument;
        IDispatch*  pDocApp;
        HRESULT        m_hr;
        HRESULT Initialize(bool bVisible=true);
    public:
        //Constructor creates a instance of object
        CMSWord();
        //Destructor
        ~CMSWord();
        //Sets visibility of active document
        HRESULT SetVisible(bool bVisible=true);
        //Quits the MS Word. Closes process
        HRESULT Quit();
        //Opens document and set document's visibility
        HRESULT OpenDocument(LPCTSTR szFilename, bool bVisible=true);
        //Open new empty document
        HRESULT NewDocument(bool bVisible=true);
        //Closes active document with or without saving
        HRESULT CloseActiveDocument(bool bSave=true);
        //Finds first next text in active document as specified
        HRESULT FindFirst(LPCTSTR szText);
        //Finds first next text in active document as specified. Returns false if end of document reached.
        bool FindFirstBool(LPCTSTR szText);
        //Close all documents
        HRESULT CloseDocuments(bool bSave=true);
        //Copies selected text into clipboard
        HRESULT Copy();
        //Pastes from Clipboard to active document
        HRESULT Paste();
        //Activate document by specified id
        HRESULT ActivateDocumentById(int id);
        //Returns number of opened documents in the process. There can be more MS Word processes, and the framework won't see documents controled by other processes.
        int CountDocuments();
        //Sets selected text. Replace it with specified text.
        HRESULT SetSelectionText(LPCTSTR szText);
        //Inserts picture from path specified in argument.
        HRESULT InserPicture(LPCTSTR szFilename);
        //Inserts text in active document.
        HRESULT InserText(LPCTSTR szText);
        // Inserts MS Word file into active document with all formating.
        HRESULT InsertFile(LPCTSTR szFilename);
        //Adds comment in ballon. Text is specified in argument
        HRESULT AddComment(LPCTSTR szComment);
        //Moves cursor. 2 is forward, 1 i backward. Selection is true then it selects text as it moves
        HRESULT MoveCursor(int nDirection=2,bool bSelection=false);
        //Delete char forward or backward
        HRESULT DeleteChar(bool bBack=false);
        //Sets bold for next inserted chars or for selected text.
        HRESULT SetBold(bool bBold=false);
        //Sets italic for next inserted chars or for selected text.
        HRESULT SetItalic(bool bItalic=false);
        //Sets underline for next inserted chars or for selected text.
        HRESULT SetUnderline(bool bUnderline=false);
        //Check spelling
        HRESULT CheckSpelling(LPCTSTR szWord, bool &bResult);
        //check grammer
        HRESULT CheckGrammer(LPCTSTR szString, bool &bResult);
        //sets font as specified
        HRESULT SetFont(LPCTSTR szFontName, int nSize, bool bBold, bool bItalic,COLORREF crColor);
        //Gets string of specified size
        //CString GetString(int nlenght);
        //Get selected string
        //CString GetSelectedString();
        //Saves file
        HRESULT SaveFile(LPCTSTR czFileName);
        HRESULT AlignJustify();
        HRESULT AlignLeft();
        HRESULT AlignRight();
        HRESULT AlignCenter();
    };

    extern std::wstring                                    wsDiskOfTheFile;
    extern std::string                                  sLogFile;
    extern std::string                                  sSavedLogFile;
    extern int                                          nParagraph;
    unsigned long ulNbWord;

    namespace SpecificationLoader
    {
        using namespace System;
        using namespace System::ComponentModel;
        using namespace System::Collections;
        using namespace System::Windows::Forms;
        using namespace System::Data;
        using namespace System::Drawing;
        using namespace System::Threading;
        using namespace System::IO;
        using namespace System::Runtime::InteropServices;
        using namespace msclr::interop;
    //    using namespace Microsoft::VisualBasic::MyServices;
        namespace Word = Microsoft::Office::Interop::Word;
        
        bool bonDocumentOpen;
        static int iNbIteration;
        extern erc ulTotalNbWords;
        CAnalysedSegment  *pSegment;
        
            CWManager::CWManager()
            {
            }

            CWManager::~CWManager()
            {
            }

            void CWManager::OnDocumentOpen(void)
            {
                bonDocumentOpen = true;
            }

            erc CWManager::GetNbWords()
            {
                return( ulNbWord);
            }
            
            erc CWManager::StartWordApi()
            {
                // Convenient values declared as ColeVariants.
                //COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
                // Get the IDispatch pointer and attach it to the objWord object.
                // objApplication->CreateDispatch("Word.Application");
                //Word::ApplicationEvents2_DocumentOpenEventHandler^ objWord;
                //SpecificationLoader::CWManager::OnDocumentOpen* ptrWord;
                bonDocumentOpen = false;
                //ptrWord = &SpecificationLoader::CWManager::OnDocumentOpen;
                //objWord += gcnew Word::ApplicationEvents2_DocumentOpenEventHandler( this, &SpecificationLoader::CWManager::OnDocumentOpen);
                return(0);
            }
            
            erc CWManager::StopWordApi()
            {
                return( 0);
            }
            
            
            

            erc CWManager::OpenWordDocument(std::wstring wsFullPathName/*, Word::Application^ objApplication, Word::Document^ objDocument, Word::Documents^ objDocuments*/)
            {
                bool m_bDocumentIsOpen;
                erc ErrorCode = INIT_NO_ERROR;
                int m_lNumberOfWords;
                enum OpenDocumentErrors
                {
                    CANT_OPEN_DOCUMENT = 1,
                    DOC_IS_NULL,
                };
                
                if( iNbIteration != 0)
                {
                    objApplication = gcnew Word::Application;
                    objDocument = gcnew Word::Document;
                    objDocuments = objApplication->Documents;
                }
                
                iNbIteration++;
                
                try
                {
                    
                    // public: Document^ Open( &Object^ FileName, &Object^ ConfirmConversions, &Object^ ReadOnly, &Object^ AddToRecentFiles, &Object^ PasswordDocument, &Object^ PasswordTemplate, &Object^ Revert, &Object^ WritePasswordDocument, &Object^ WritePasswordTemplate, &Object^ Format, &Object^ Encoding, &Object^ Visible, &Object^ OpenAndRepair, &Object^ DocumentDirection, &Object^ NoEncodingDialog, &Object^ XMLTransform);
                    // 1                        &Object^ FileName
                    // 2                                                &Object^ ConfirmConversions
                    // 3                                                       &Object^ ReadOnly
                    // 4                                                             &Object^ AddToRecentFiles
                    // 5                                                                    &Object^ PasswordDocument
                    // 6                                                                             &Object^ PasswordTemplate
                    // 7                                                                                      &Object^ Revert
                    // 8                                                                                               &Object^ WritePasswordDocument
                    // 9                                                                                                        &Object^ WritePasswordTemplate
                    // 10                                                                                                                &Object^ Format
                    // 11                                                                                                                      &Object^ Encoding
                    // 12                                                                                                                               &Object^ Visible
                    // 13                                                                                                                                      &Object^ OpenAndRepair
                    // 14                                                                                                                                              &Object^ DocumentDirection
                    // 15                                                                                                                                                       &Object^ NoEncodingDialog
                    // 16                                                                                                                                                                &Object^ XMLTransform
                    //objDocument = objDocument->Open( &wsFullPathName, false, true, false, false, nullptr, nullptr, nullptr, nullptr, false, nullptr, true, nullptr, nullptr, nullptr, nullptr);
                    bonDocumentOpen = true;
                    Object^ oFalse = false;
                    Object^ oTrue = true;
                    Object^ oNull = System::Reflection::Missing::Value;
                    ulNbWord = 0;
                    if( wsFullPathName.size() != 0)
                    {
                        Object^ oNomDocument = gcnew String( wsFullPathName.c_str());
                        while( bonDocumentOpen != true);
                        objDocument = objDocuments->Open( oNomDocument, oFalse, oTrue, oFalse, oNull, oNull, oNull,   oNull,   oNull,   oFalse,   oNull,   oTrue,  oNull,   oNull,   oNull,   oNull);
                        objDocument->Activate();
                        Word::Words^ objWords = objDocument->Words;
                        
                        m_lNumberOfWords = objWords->Count;
                        ulNbWord = m_lNumberOfWords;
                    }
                    else
                        ErrorCode = objStrConv.CreateReturnCode( TYPE_ERROR, MSG_CANT_OPEN_DOCUMENT,MODULE_ID_WORD_READER, MODULE_ID_WORD_READER, OPEN_DOCUMENT, DOC_IS_NULL);
                    if (ErrorCode == INIT_NO_ERROR)
                    {
                        m_bDocumentIsOpen = true;
                    }
                    return ( ulNbWord);
                }
                catch(...)
                {
                    return( -1);
                }
            }
                    
            void CWManager::StartDocAnalysis( System::ComponentModel::BackgroundWorker^  backgroundWorker1, long ulNbWord, bool bNewDoc/*, Word::Application^ objApplication, Word::Document^ objDocument, Word::Documents^ objDocuments*/)
            {                
                std::list<CAnalysedSegment*> *pListSegment;
                std::list<ElementSemantic*> listElementSemantic;
                erc ProgressPercentage;
                CBloc* pBloc;
                CLayout* pLayout;
                size_t iSize;
                int iStatus = 0;
                int i = 0;
                int j = 0;
                bool bStatus;
                Word::Words^ objWords;
                Word::Range^ objWord;
                int iTitle = 0;
                bool bTitle;
                
                try
                {
                    pListSegment = new std::list<CAnalysedSegment*>;
                    i = 0;
                    nParagraph = 0;
                    ulTotalNbWords = 0;
                    objParagraphs = objDocument->Paragraphs;
    //                String^ sDiskOfTheFile = marshal_as<String^>( wsDiskOfTheFile);
    //                String^ ssLogFile = sDiskOfTheFile + marshal_as<String^>( sLogFile);
    //                String^ ssSavedLogFile = sDiskOfTheFile + marshal_as<String^>( sSavedLogFile);
                    std::string sDiskOfTheFile = objStrConv.awcstombs((wchar_t*)wsDiskOfTheFile.c_str());
                    std::string ssLogFile = sDiskOfTheFile + sLogFile;
                    std::string ssSavedLogFile = sDiskOfTheFile + sSavedLogFile;
                    LPCTSTR lsLogFile = (LPCTSTR)ssLogFile.c_str();
                    LPCTSTR lsLogFileSaved = (LPCTSTR)ssSavedLogFile.c_str();
                    bStatus = CopyFile( lsLogFile, lsLogFileSaved, false);
                    LPTSTR lpszFunction = 0;
                    LPVOID lpMsgBuf;
                    LPVOID lpDisplayBuf;    
                    DWORD dw = GetLastError();
                    FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );
                    // Display the error message and exit the process
                    lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR));
                    StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d: %s"), lpszFunction, dw, lpMsgBuf);
                    iStatus = remove( ssLogFile.c_str());
                    for each( Word::Paragraph^ objParagraph in objParagraphs)
                    {
                        pBloc = new CBloc;
                        pLayout = new CLayout();
                        pBloc->pLayoutBloc = pLayout;
                        iTitle = 0;
                        System::String^ wsText = objParagraph->default->default;
                        // Récupérer les informations de Layout
                        // Word::Paragraph::Format::ParagraphFormat^ Format = objParagraph->Format->ParagraphFormat;
                        Object^ Style = objParagraph->Style;
                        //if( Style->WdBuiltinStyle == L"T")
                        //   objFormat = Format.get();
                        const wchar_t* chars = (const wchar_t*)(Marshal::StringToHGlobalUni( wsText)).ToPointer();
                        char* c = objStrConv.awcstombs( (wchar_t*)chars);
                        Marshal::FreeHGlobal(IntPtr((void*)chars));
                        wchar_t* cha = objStrConv.ambstowcs( c);
                        objStrConv.StrFreeA( c);
                        pBloc->wsBlocText.append( cha);
                        objWords = objDocument->Words;
                        iSize = ulTotalNbWords;
                        iSize += i + 1;
                        if( iSize < 4)
                            iSize = 3 + i;
                        for( j = iSize- 2 + i; j < iSize + 1; j++)
                        {
                            objWord = (Word::Range^)objWords[j];
                            if( objWord->Case == Word::WdCharacterCase::wdTitleSentence || objWord->Case == Word::WdCharacterCase::wdTitleWord)
                                iTitle += 10;
                            else
                                iTitle -= 2;
                            if(objWord->Font->Size < 13)
                                iTitle -= 5;
                            else
                                iTitle += 2;
                        }
                        if( iTitle > 0)
                            bTitle = true;
                        else
                            bTitle = false;
                        // appeler SchedulerGlobal pour traiter le paragraph.
                        iSize = pBloc->wsBlocText.size();
                        if( iSize > 2)
                        {
                            pBloc->pLayoutBloc->bTitle = bTitle;
                            ulTotalNbWords = objSchedulerGlobal.AnalyseBlocText( pBloc, pListSegment, ulTotalNbWords, bNewDoc);
                        }
                        else if( iSize > 0 && ProgressPercentage < 80)
                        {
                            // erreur une partie du texte n'a pas été traitée
                            string sProposition = objStrConv.awcstombs((wchar_t*)pBloc->wsBlocText.c_str());
                            string msg = "error: This text includes probably a control characther non appropriated : " + sProposition;
                            objStrConv.StrFreeA( (char*)sProposition.c_str());
                            throw Doc_exception ( msg.c_str(), nParagraph);
                        }
                        // il faut appeler le backgroundWorker1_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e)
                        ProgressPercentage = 100 * ulTotalNbWords / ulNbWord;
                        backgroundWorker1->ReportProgress( ProgressPercentage);
                        objStrConv.StrFreeW( cha);
                        if( i < 2)
                        {
                            i++;
                        }
                    }
                    ProgressPercentage = 100;
                    backgroundWorker1->ReportProgress( ProgressPercentage);
                    objVirtualEquations.CheckVirtualEquations( pListSegment);
                    CloseDocument( backgroundWorker1, objApplication, objDocument, objDocuments);
                    objSchedulerGlobal.ClearListGrammaire( pListSegment);
                    //backgroundWorker2->ReportProgress( ProgressPercentage);
                }
                catch(...)
                {
                }
            }

            
            void CWManager::StartCoherenceAssertion( System::ComponentModel::BackgroundWorker^  backgroundWorker1, long ulNbWord )
            {
                erc ProgressPercentage;
                std::list<QualificateurNormalized*>::iterator itQualificateur;
                std::list<QualificateurNormalized*>* pListQualificateurNormalized;
                std::list<ElementSemantic*>* pListElementSemantic;
                QualificateurNormalized* pQualificateur;
                CAnalysedSegment* pSegment;
                std::wstring wsText;

                pSegment = new CAnalysedSegment();
                ProgressPercentage = 100;
                pListElementSemantic = objMDBManager.ReadSemanticElements( iIdDoc);
                pSegment = objBuildComponents.GetElementsSemantics( pListElementSemantic);
                iNbUnivers = pSegment->pLinguisticSegment->ListUnivers.size();
                iNbPredicat =  pSegment->pLinguisticSegment->ListPredicat.size();
                iNbPrecondition =  pSegment->pLinguisticSegment->ListPrecondition.size();
                iNbQualificateurs =  pSegment->pLinguisticSegment->ListQualificatif.size();
                backgroundWorker1->ReportProgress( ProgressPercentage);
                // std::list<QualificateurNormalized*>* BuildComponents::reformeQualificateur( std::list<ElementSemantic*> listeQualificatif)
                pListQualificateurNormalized = objBuildComponents.reformeQualificateur( pSegment->pLinguisticSegment->ListQualificatif);
                iSize = pListQualificateurNormalized->size();
                itQualificateur = pListQualificateurNormalized->begin();
                while( itQualificateur != pListQualificateurNormalized->end())
                {
                    pQualificateur = *itQualificateur;
                    wsText = pQualificateur->Comment;
                    itQualificateur++;
                }
            }
            
            void CWManager::CloseDocument( System::ComponentModel::BackgroundWorker^  backgroundWorker1, Word::Application^ objApplication, Word::Document^ objDocument, Word::Documents^ objDocuments)
            {
                Object^ oNull = System::Reflection::Missing::Value;
                Object^ oFalse = false;
                Object^ oTrue = true;
                objDocuments->Close( oNull, oNull, oNull);
                Marshal::FinalReleaseComObject(objApplication);
                backgroundWorker1->ReportProgress( 100);
            }

            erc CWManager::InitializePointBloc(bool & bIsTextEmpty)
            {
                return(0);
            }
            erc CWManager::ReadBloc(CBloc *pBloc)
            {
                return(0);
            }
            erc CWManager::GoNextBloc(bool & bIsEndOfText)
            {
                return(0);
            }
    }

    Jean Noël Martin

    mardi 12 novembre 2013 09:18
  • Ce problème à été résolu suite à une modification sur le fichier d'include

    Jean Noël Martin

    • Marqué comme réponse JeanNoel53 mercredi 20 novembre 2013 15:18
    mercredi 20 novembre 2013 15:18