none
Adresser les objets Word dans l'application RRS feed

  • Question

  • J'ai donc déclaré des objets Word sur l'application qui ouvre ces objets

    ci après les déclarations:

     enum CWordReaderMethods
      {
        START_WORD_API,
        STOP_WORD_API,
        OPEN_DOCUMENT,
        CLOSE_DOCUMENT,
        INITIALIZE_POINT_BLOC,
        GO_NEXT_BLOC,
        READ_BLOC,
        GET_LAYOUT_BLOC
      };
      struct Statistics
      {
       long m_lNumberOfParagraphs;
       long m_lNumberOfWords;
      };
    /*_____CLASS-DEFINITION_______________________________________________________*/
    
    
    public ref class CWReader
    {
    
    #define FIRST_PARAGRAPH_INDEX                                             1
    #define TRUE                                                              1
    #define FALSE                                                             0
    #define WORD_BOLD_TRUE                                                    -1
    #define WORD_BOLD_FALSE                                                   0
    #define WORD_ITALIC_TRUE                                                  -1
    #define WORD_ITALIC_FALSE                                                 0
    
    #define WIDE_CHARACTER_BELL                 '\u0007'
    #define WIDE_CHARACTER_CARRIAGE_RETURN      '\u000D'
    #define WIDE_CHARACTER_SPACE				L" "
    #define WIDE_CHARACTER_BACK_SLASH_B			L"\b"
    #define WIDE_CHARACTER_BACK_SLASH_F			L"\f"
    #define WIDE_CHARACTER_BACK_SLASH_T			L"\t"
    #define WIDE_CHARACTER_BACK_SLASH_V			L"\v"
    
     
    
    private:
      bool                               m_bDocumentIsOpen;
      long                               m_lNumberOfParagraphs;
      long                               m_lNumberOfWords;
      long                               m_IndexOfCurrentParagraph;
      System::String ^                   m_wsRangeText;
    
    public:
      interface class _Application;
      interface class _Document;
      interface class Document;
      interface class Paragraph;
      interface class Range;
      interface class Words;
      property Document^ ActiveDocument
      {
    	Document^ get();
      }
      _Application ^        m_pWordApplication;
      _Document ^           m_pWordDocument;
      _Document ^           m_pCurrentDocument;
      Paragraph ^           m_pCurrentParagraph;
      Range ^               m_pCurrentRange;
      Paragraph ^           m_pAllParagraphs;
      Words ^               m_pAllWords;
      CWReader ^            pReader;
      CWReader ^            pWordReader;
      CWReader ^            objReader;
      CWReader::CWReader();
      CWReader::~CWReader();
      erc StartWordApi();
      erc StopWordApi();
      erc OpenDocument(std::wstring wsFullPathName);
      erc CloseDocument();
      erc InitializePointBloc(bool & bIsTextEmpty);
      erc GoNextBloc(bool & bIsEndOfText);
      erc ReadBloc(CBloc *pBloc);
      erc GetLayoutBloc(CLayout *pLayoutBloc);
      erc GetNbWords();
      erc GetNbParagraph();
      void RemoveLastBadCharacter();
      void change_tofind_In_wstring_With_Space(std::wstring &wsString, std::wstring to_find);
    };

    Malheureusement dans le  corps du programme ces objets sont manipulés d'une façon que je ne comprend pas:

    /*---------------------------------------------------------------*/
    /*Name          : StartWordApi                                   */
    /*---------------------------------------------------------------*/
    /*Role          : The aim is to start the Word API               */
    /*Preconditions : Word Api not activated                         */
    /*In            : Nothing                                        */
    /*InOut         : Nothing                                        */
    /*Resources     : MS WORD API                                    */
    /*Return        : Error code                                     */
    /*Constraints   :                                                */
    /*Behavior      :                                                */
    /*---------------------------------------------------------------*/
    //
    //PROC StartWordApi
    //DO
    //  [Start WORD API]
    //OD
    //
    
       DLL erc CWReader::StartWordApi()
       { 
       enum StartWordApiErrors
       {
          CANT_START_WORD_API = 1
       };
        
      erc       ErrorCode;
      pWordReader = pReader;
      ErrorCode = INIT_NO_ERROR;
      try
      {
        m_pWordApplication = gcnew _Application(NULL);
        m_pWordApplication->InitServerData();
        m_pWordApplication->Connect();
      }
      catch( ... )
      {
        ErrorCode = objStrConv.CreateReturnCode(TYPE_ERROR, MSG_CANT_START_WORD_API,MODULE_ID_WORD_READER,
                          MODULE_ID_WORD_READER, START_WORD_API,
                          CANT_START_WORD_API);
      }
      
      return ErrorCode;
    
    }
    /*---------------------------------------------------------------*/
    /*Name          : StopWordApi                                    */
    /*---------------------------------------------------------------*/
    /*Role          : Stop the Word Api                              */
    /*Preconditions : Word Api already started                       */
    /*In            : Nothing                                        */
    /*InOut         : Nothing                                        */
    /*Resources     : MS WORD API                                    */
    /*Return        : Error code                                     */
    /*Constraints   :                                                */
    /*Behavior      :                                                */
    /*---------------------------------------------------------------*/
    //
    //PROC StopWordApi
    //DO
    //  [Stop WORD API]
    //OD
    DLL erc CWReader::StopWordApi()
    {
      enum StopWordApiErrors{
          CANT_STOP_WORD_API = 1
      };
        
      erc       ErrorCode;
      
      ErrorCode = INIT_NO_ERROR;
      try
      {
        m_pWordApplication->Disconnect();
        delete m_pWordApplication;
        m_pWordApplication = NULL;
        CWReader::~CWReader();
      }
      catch(...)
      {
        ErrorCode = objStrConv.CreateReturnCode(TYPE_ERROR, MSG_CANT_STOP_WORD_API,MODULE_ID_WORD_READER,
                          MODULE_ID_WORD_READER, STOP_WORD_API,
                          CANT_STOP_WORD_API);
      }
      
      return ErrorCode;
        
    }

    et le compilateur m’agonit d'injures:

    :_Application'
    1>          d:\usr\memoria\dev\linguistic\wordreader\com\WordReader.h(72) : voir la déclaration de 'CWReader::_Application'
    1>..\..\..\..\Linguistic\WordReader\src\WordReader.cpp(83): error C2227: la partie gauche de '->InitServerData' doit pointer vers un type class/struct/union/générique
    1>..\..\..\..\Linguistic\WordReader\src\WordReader.cpp(84): error C2027: utilisation du type non défini 'CWReader::_Application'
    1>          d:\usr\memoria\dev\linguistic\wordreader\com\WordReader.h(72) : voir la déclaration de 'CWReader::_Application'
    1>..\..\..\..\Linguistic\WordReader\src\WordReader.cpp(84): error C2227: la partie gauche de '->Connect' doit pointer vers un type class/struct/union/générique
    1>..\..\..\..\Linguistic\WordReader\src\WordReader.cpp(124): error C2027: utilisation du type non défini 'CWReader::_Application'
    1>          d:\usr\memoria\dev\linguistic\wordreader\com\WordReader.h(72) : voir la déclaration de 'CWReader::_Application'
    1>..\..\..\..\Linguistic\WordReader\src\WordReader.cpp(124): error C2227: la partie gauche de '->Disconnect' doit pointer vers un type class/struct/union/générique
    Comment m'en sortir?


    Jean Noël Martin


    lundi 25 juin 2012 11:31

Réponses

Toutes les réponses

  • Ce problème a aussi besoin d'un réponse, mais il est plus pointu. il peut également être résolue par la solution DLL

    Jean Noël Martin

    jeudi 28 juin 2012 06:37
  • Je suppute que la ligne 72 de WordReader.h est "m_pWordApplication = gcnew _Application(NULL);"

    Logiquement "_Application" est un objet Word, non ?

    Il doit manquer un using correspondant au namespace définissant l'objet "_Application" de Word,

    type

    using namespace Microsoft.Office.Interop.Word; 

    De plus _Application est une interface, je pense que c'est plus un gcnew Application qu'il faut faire.

     

    Un exemple en C# :

    http://code.msdn.microsoft.com/office/CSAutomateWord-f422cae5


    Paul Bacelar, Ex - MVP VC++

    jeudi 28 juin 2012 15:19
    Modérateur
  • Je met ce thread en suspens: il parait obsolète. si il doit être rouvert, je donnerai des informations complémentaires

    Jean Noël Martin

    • Marqué comme réponse JeanNoel53 mardi 3 juillet 2012 06:38
    mardi 3 juillet 2012 06:37