none
automatiser l'accès à word à partir d'une application Visual Studio RRS feed

  • Question

  • J'essaie de reprendre l'application Word faite sous BCB pour la migrer sous VisualStudio

    pour cela je dois déclarer des objets sur les objets de Word.

    J'ai défini quelques points de départ à partir de la présentation de Ole

    mais je n'arrive pas à déclarer la première variable

    voila l'en tête du fichier

    #pragma hdrstop
    #namespace ole::word;
    #include "StdAfx.h"
    #include "WordReader.h"
    #ifdef GENERE_DLL 
    #define DLL __declspec (dllexport)
    #else
    #define DLL
    #endif
    extern bool                  m_bServerConnected;         //Boolean that indicate if the server is connected
    /*_____LOCAL-DEFINE___________________________________________________________*/
    #define WORDVER
    /*_____LOCAL-TYPES____________________________________________________________*/
    /*_____GLOBAL-DATA____________________________________________________________*/
    Application *        m_pWordApplication;

    J'y suis allé en tâtonnant. Le namespace n'est pas relevé par le compilateur par contre le type Application n'est pas reconnu

    Je joins le stdafx.h pour compléter:

    #include <string>
    #include <list>
    #include <stdio.h>
    #include <stdlib.h>
    #include <vcclr.h >
    #include <algorithm>
    #include <iostream>
    #include <sstream>
    #include <Windows.h>
    #include <ctype.h>
    #include <tchar.h>
    #include <wchar.h>
    #include <iostream>
    #include <fstream>
    #include <io.h>
    #include <vector>

    Je vous remercie de m'orienter pour la déclaration du premier type et peut être à trouver le site comparable au msdn deréférence

    J'ai essayé aussi de modifier la déclaration des using...

    using namespace ole::word;
    using namespace System;
    using namespace System::Windows;

    sans résultat


    Jean Noël Martin


    mercredi 16 mai 2012 06:47

Réponses

  • J'ai bien configure /clr mais il rend le même message d'erreur

    cl : Ligne de commande error D8016: options de ligne de commande '/clr' et '/MTd' non compatibles

    cependant comme la partie librairie semble s'être bien passé Je retire le /MTd au profit de la solution lib/DLL


    Jean Noël Martin


    • Modifié JeanNoel53 jeudi 24 mai 2012 02:22
    • Marqué comme réponse JeanNoel53 jeudi 24 mai 2012 16:18
    jeudi 24 mai 2012 02:19

Toutes les réponses

  • Je ne vais pas vraiment répondre à votre question, désolé.

    Il est maintenant (depuis 2007) très rare de faire à bon escient de l'automation d'application Office.

    Donc, il est fort probable que l'on peut faire ce que vous voulez faire sans faire de l'automation.

    Donc, que voulez-vous faire avec Word ?

    Sinon, je pense que #import est le mot magique pour du pilotage d'application Word "old school" (OLE/COM).

    http://msdn.microsoft.com/en-us/library/8etzzkb6(v=vs.100).aspx


    Paul Bacelar, Ex - MVP VC++

    lundi 21 mai 2012 12:38
    Modérateur
  • mon interface avec word lit les blocs de texte, sous forme de wstring et de layout, jusqu'à la fin du fichier

    J'ai une petite non conformité sur les layout: je ne sais pas reconnaitre les styles titres.

    J'ai deux implémentations sous bcb, l'import n'est pas exclue, mais inclure quoi?


    Jean Noël Martin

    mardi 22 mai 2012 02:48
  • Si vos fichiers sont des .docx il serait peut-être plus simple d'utiliser le SDK dédié, il est .NET mais vous commencez à prendre le coup, et c'est plus simple qu'OLE/COM.

    http://msdn.microsoft.com/fr-fr/architecture/cc716300.aspx

    Si vous avez deux implémentations sous BCB, pour refaire cette partie ?

    Pour l'import, il faut importer les types COM pour pouvoir vous en servir.

    Dans COM, les types sont définis dans une typelib. Il existe des fichiers .tlb qui les contiennent mais il est possible que les exe et les dll exportant des composants disposent d'une ressource binaire contenant cette typelib.

    L'instruction #import est là pour générer les classes C++ ou des fonctions C encapsulant les composants COM.

    Le mécanisme n'est pas évidant, il faut lire attentivement la référence que je vous ai fourni précédemment.

    Une fois les fichiers .tli et tlh généré par VS, vous pourrez utiliser les objets COM de Word dans votre code. Il faut juste trouver la tlb correspondante.


    Paul Bacelar, Ex - MVP VC++

    • Proposé comme réponse Ciprian Duduiala mercredi 23 mai 2012 06:57
    • Marqué comme réponse JeanNoel53 mercredi 23 mai 2012 10:02
    • Non marqué comme réponse JeanNoel53 mercredi 23 mai 2012 10:07
    mardi 22 mai 2012 09:41
    Modérateur
  • Bonjour,

    il m'ont fait télécharger un module supplémentaire que j'ai trouvé sur le site de Microsoft

    mais ca na rien changé


    Jean Noël Martin


    mercredi 23 mai 2012 10:02
  • C'est qui "il(s)" ????

    J'ai donné 3 pistes mais vous n'indiquez pas celle que vous avez choisie.

    - reprendre "from scratch" et utiliser le SDK Office pour générer des fichiers au format Word

    - utilisation/correction des implémentations BCB

    - utilisation de COM, soit pour du "from scratch" si les implémentations BCB n'utilise pas directement COM, soit pour de la correction des implémentations BCB pour les rendre compatibles VS. C'est le laïus sur le #import. La valeur du "paramètre" de #import est fonctions des types nécessaires à votre sources et de la source de la définition de ces types. Mais normalement, la source importe peu, si les types sont les mêmes (même typelib).


    Paul Bacelar, Ex - MVP VC++

    mercredi 23 mai 2012 11:15
    Modérateur
  • J'ai suivi la piste COM

    et après j'ai suivi la piste SDK qui a provoqué l'erreur suivante:

    cl : Ligne de commande error D8016: options de ligne de commande '/clr:pure' et '/MTd' non compatibles


    Jean Noël Martin


    mercredi 23 mai 2012 13:40
  • L'erreur est avec la piste COM ou la piste SDK Office. Vous êtes assez difficile à suivre. ;-)

    Le message d'erreur montre que vous utilisez des composants incompatibles et c'est assez normal.

    Avec "/clr:pure" vous interdisez toute utilisation de codes non managé donc pas de C-Runtime (/MTd).

    Il faut que vous déterminiez quels modules utilisent des options contradictoires et utilisez d'autres modules ou d'autres versions de ces mêmes modules.

    Comme je sais que vous fêtes des Winforms, je pense que le problème est que vous devez utiliser la piste COM donc du code non managé.

    Il faut donc ne plus utiliser l'option "/clr:pure" dans votre projet mais "/clr". Je crois que je vous ai déjà fourni le chemin vers cet option.

    Click droit sur le projet dans l'explorateur d'évènement -> Propriétés -> Propriétés de configuration -> Général -> Prise en charge du Common Language Runtime -> choisir ....(/clr)


    Paul Bacelar, Ex - MVP VC++

    mercredi 23 mai 2012 15:48
    Modérateur
  • J'ai bien configure /clr mais il rend le même message d'erreur

    cl : Ligne de commande error D8016: options de ligne de commande '/clr' et '/MTd' non compatibles

    cependant comme la partie librairie semble s'être bien passé Je retire le /MTd au profit de la solution lib/DLL


    Jean Noël Martin


    • Modifié JeanNoel53 jeudi 24 mai 2012 02:22
    • Marqué comme réponse JeanNoel53 jeudi 24 mai 2012 16:18
    jeudi 24 mai 2012 02:19