none
Les résolution du link RRS feed

  • Question

  • La procédure proposée par Paul Bacelar est bonne. Il faut ajouter pour quelqu’un qui n'est pas spécialiste de Visual Studio que les menus de Visual Studio sont contextes sensibles, et donc qu'il vaut mieux pointer sur un fichier C++ pour exécuter la procédure suivante.

    Quand on fait une Dll avec VS à  partie du code source, vous avez plusieurs possibilités pour spécifier la liste des fonctions exportées par la Dll, dont le fichier .def.

    Avec cette liste, VS génère un fichier .lib qui ne contient que des fonctions "stubs" qui ne font qu'appeler les fonctions dans la Dll. Le code de la lib est intégré dans l'exécutable et le code du stub utilise une indirection pour retrouver l'adresse de la fonction dans la Dll car la Dll peut être chargée n'importe où en mémoire.

    L'astuce du .def, c'est que vous n'avez pas besoin du code source de la Dll pour généré ces fonctions "stubs" dans la lib mais juste des noms. Donc en remplissant convenablement un fichier .def vous génèrerez un fichier .lib contenant les mêmes fonctions "stubs" qui si ce fichier .lib avait généré en même temps que la Dll.

    Vous semblez connaitre l'exécutable "lib", donc vous pouvez générer les lib. C'est exactement les mêmes que ceux générés lors de la compilation de la Dll.

    Il faut donc juste ajouter ces lib ainsi créées à la liste des lib à utiliser par votre projet utilisateur de la Dll lors d' l'édition de lien.

    click droit sur le projet utilisateur dans l'explorateur de solution -> Propriétés -> Propriétés de configuration -> Editeur de lien -> entrée ->Dépendances supplémentaire -> Y AJOUTER LE NOM DE OU DES LIBS GENEREES

    Si ces libs ne sont pas avec les autre libs du projet :

    click droit sur le projet utilisateur dans l'explorateur de solution -> Propriétés -> Propriétés de configuration -> Editeur de lien -> Général -> Répertoires de bibliothèques supplémentaires -> Y METTRE LES CHEMINS VERS LES REPERTOIRES CONTENANT LES LIBS.

    mais ce sujet ne résout pas les problèmes d'édition de liens:

    J'ai suivi pas a pas la procédure très bien documenté ci dessus et ça n'a rien changé: beaucoup des symboles spécifiés dans les .def  sont diagnostiqués par le linker avec les diagnostiques suivants :

    ParserManager.obj : error LNK2019: symbole externe non résolu "char * __cdecl WorkTagger(char *)" (?WorkTagger@@$$FYAPADPAD@Z) référencé dans la fonction "public: unsigned __int64 __thiscall CParserManager::Brill_ParseBloc(wchar_t *,struct stAnalysedWord *,unsigned long *,long)" (?Brill_ParseBloc@CParserManager@@$$FQAE_KPA_WPAUstAnalysedWord@@PAKJ@Z)

    voila le fichier de définition

    LIBRARY     TAGGERCDLL.DLL

    EXPORTS
        @@Memory@Finalize              @10  ; __linkproc__ Memory::Finalize
        @@Memory@Initialize            @9   ; __linkproc__ Memory::Initialize
        @@Strconv@Finalize             @8   ; __linkproc__ Strconv::Finalize
        @@Strconv@Initialize           @7   ; __linkproc__ Strconv::Initialize
        @@Taggercdll@Finalize          @2   ; __linkproc__ Taggercdll::Finalize
        @@Taggercdll@Initialize        @1   ; __linkproc__ Taggercdll::Initialize
        @BrillTagger@$bctr$qv          @3   ; BrillTagger::BrillTagger()
        @BrillTagger@$bdtr$qv          @4   ; BrillTagger::~BrillTagger()
        @BrillTagger@BTagger_setup$qv  @5   ; BrillTagger::BTagger_setup()
        @BrillTagger@WorkTagger$qpc    @6   ; BrillTagger::WorkTagger(char *)
        ___CPPdebugHook                @11  ; ___CPPdebugHook

    et la définition donnée dans le .H

        CParserManager::CParserManager();
        CParserManager::~CParserManager();
        erc CParserManager::Brill_ParseBloc(  wchar_t * pBlocText, stANALYSED_WORD * pListAnalysedWord, unsigned long* ulWordNumber, long iPos);
        erc CParserManager::ParserAnalyse( stANALYSED_WORD * pListAnalysedWord, std::list<CAnalysedWord *> *pListWord, unsigned long ulWordNumber);
        erc CParserManager::InitParserManager(enLanguage Language);
        erc CParserManager::GetTranslationsOfSourceLemma(std::wstring wsSourceLemma, enLanguage SourceLanguage,enLanguage TargetLanguage, std::list<CLemmaDescription *> &ListLemmaTranslation);
        void CParserManager::QualifPivot( stANALYSED_WORD * pListAnalysedWord, int ulWordNumber);
        int CParserManager::BTranscodePartOfSpeech( char* NextStr, char* str, char* pPOS, char* pFlex, enStatus* iStatus);
        erc CParserManager::ParseBloc( std::wstring wsBloc, std::list<CAnalysedWord *>* pListWord);

    voila aussi le h de la classe Tagger

    class BrillTagger
    {
       BrillTagger::BrillTagger();
       BrillTagger::~BrillTagger();
       void BrillTagger::BTagger_setup();
       char* BrillTagger::WorkTagger( char* strMessage);
       char* BrillTagger::tag(const char *buf);
    };

    peut être est ce du a l’absence du mot clef __cdecl. il semble que ce mot soit introduit par le linker à tort dans ses attentes. je pense à une option non documenté du link. Mais d'après d'autres thread __cdecl désigne une interface c++; donc ok;

    on a encore un cdecl pour un objet c++.

    1>ParserManager.obj : error LNK2028: jeton non résolu (0A00010E) "void __cdecl BTagger_setup(void)" (?BTagger_setup@@$$FYAXXZ) référencé dans la fonction "public: unsigned __int64 __thiscall CParserManager::InitParserManager(enum enLanguage)" (?InitParserManager@CParserManager@@$$FQAE_KW4enLanguage@@@Z)

    J'ai mis au carré la déclaration de la classe BrillTagger, sans résultat.

    il semble cependant qu'il y ait plusieurs diagnostic de même ordre mais de statut différent:

    1>all_in_one.obj : error LNK2028: jeton non résolu (0A000AD3) "extern "C" long __stdcall RegOpenKeyExA(struct HKEY__ *,char const *,unsigned long,unsigned long,struct HKEY__ * *)" (?RegOpenKeyExA@@$$J220YGJPAUHKEY__@@PBDKKPAPAU1@@Z) référencé dans la fonction "public: struct ibpp_internals::GDS * __thiscall ibpp_internals::GDS::Call(void)" (?Call@GDS@ibpp_internals@@$$FQAEPAU12@XZ)

    1>all_in_one.obj : error LNK2019: symbole externe non résolu "extern "C" long __stdcall RegCloseKey(struct HKEY__ *)" (?RegCloseKey@@$$J14YGJPAUHKEY__@@@Z) référencé dans la fonction "public: struct ibpp_internals::GDS * __thiscall ibpp_internals::GDS::Call(void)" (?Call@GDS@ibpp_internals@@$$FQAEPAU12@XZ)

    ces messages réfèrent le code de ibpp qui est un framework: qui revendique un extern C  pour une adresse qui ressemble à une syntaxe c++;

    1>chunker.obj : error LNK2028: jeton non résolu (0A0001D4) "public: __thiscall COption::~COption(void)" (??1COption@@$$FQAE@XZ) référencé dans la fonction "void __clrcall `dynamic atexit destructor for 'Option''(void)" (???__FOption@@YMXXZ@?A0x41c9b8f6@@$$FYMXXZ)

    1>segmentation.obj : error LNK2028: jeton non résolu (0A00016F) "public: static unsigned __int64 __cdecl COption::GetStringList(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class std::list<class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class std::allocator<class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > > >,class std::list<class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class std::allocator<class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > > > *)" (?GetStringList@COption@@$$FSA_KV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@0V?$list@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@V?$allocator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@@3@PAV43@@Z) référencé dans la fonction "public: __thiscall CSegmentation::CSegmentation(void)" (??0CSegmentation@@$$FQAE@XZ)

    voici le def correspondant:

     @COption@$bctr$qv              @1   ; COption::COption()
        @COption@$bdtr$qv              @2   ; COption::~COption()
        @COption@GetBooleanValue$q63_STL@%basic_string$b20_STL@%char_traits$b%18_STL@%allocator$b%%t1opo @7   ; COption::GetBooleanValue(_STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, _STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, bool, bool *)
        @COption@GetListOfValue$qp73_STL@%list$19stOPTIONEXSTRUCTURE38_STL@%allocator$19stOPTIONEXSTRUCTURE%% @6   ; COption::GetListOfValue(_STL::list<stOPTIONEXSTRUCTURE, _STL::allocator<stOPTIONEXSTRUCTURE> > *)
        @COption@GetShortValue$q63_STL@%basic_string$b20_STL@%char_traits$b%18_STL@%allocator$b%%t1sps @8   ; COption::GetShortValue(_STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, _STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, short, short *)
        @COption@GetStringList$q63_STL@%basic_string$b20_STL@%char_traits$b%18_STL@%allocator$b%%t1161_STL@%list$63_STL@%basic_string$b20_STL@%char_traits$b%18_STL@%allocator$b%%82_STL@%allocator$63_STL@%basic_string$b20_STL@%char_traits$b%18_STL@%allocator$ymwX @14  ; COption::GetStringList(_STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, _STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, ...
        @COption@GetStringValue$q63_STL@%basic_string$b20_STL@%char_traits$b%18_STL@%allocator$b%%t1t1p63_STL@%basic_string$b20_STL@%char_traits$b%18_STL@%allocator$b%% @5   ; COption::GetStringValue(_STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, _STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, _STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL
        @COption@GetUIntValue$q63_STL@%basic_string$b20_STL@%char_traits$b%18_STL@%allocator$b%%t1uipui @4   ; COption::GetUIntValue(_STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, _STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, unsigned int, unsigned int *)
        @COption@LoadOptions$qv        @3   ; COption::LoadOptions()
        @COption@SaveOptions$qv        @13  ; COption::SaveOptions()
        @COption@SetBooleanValue$q63_STL@%basic_string$b20_STL@%char_traits$b%18_STL@%allocator$b%%t1o @9   ; COption::SetBooleanValue(_STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, _STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, bool)
        @COption@SetListOfValue$q73_STL@%list$19stOPTIONEXSTRUCTURE38_STL@%allocator$19stOPTIONEXSTRUCTURE%% @12  ; COption::SetListOfValue(_STL::list<stOPTIONEXSTRUCTURE, _STL::allocator<stOPTIONEXSTRUCTURE> >)
        @COption@SetStringValue$q63_STL@%basic_string$b20_STL@%char_traits$b%18_STL@%allocator$b%%t1t1 @11  ; COption::SetStringValue(_STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, _STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, _STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL
        @COption@SetUIntValue$q63_STL@%basic_string$b20_STL@%char_traits$b%18_STL@%allocator$b%%t1ui @10  ; COption::SetUIntValue(_STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, _STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >, unsigned int)

    quant à ces messages ils réfèrent explicitement un objet c++;

    voila les définitions des h

      CWReader* pWordReader;
      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);

        CDocumentManager::CDocumentManager(){};
        CDocumentManager::~CDocumentManager(){};
        erc StartReader(enDocType DocType);
        erc StopReader();
        erc OpenDocument(std::wstring wsFullPathName);
        erc CloseDocument();
        erc InitializePointBloc(bool & bIsTextEmpty);
        erc ReadBloc(CBloc *pBloc);
        erc GoNextBloc(bool & bIsEndOfText);

    1>schedulerGlobal.obj : error LNK2028: jeton non résolu (0A000245) "public: unsigned __int64 __thiscall CDocumentManager::ReadBloc(class CBloc *)" (?ReadBloc@CDocumentManager@@$$FQAE_KPAVCBloc@@@Z) référencé dans la fonction "public: unsigned __int64 __thiscall CSchedulerGlobal::GlobalAnalyse(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,enum enDocType,enum enApplicationName,class CMDBManager *)" (?GlobalAnalyse@CSchedulerGlobal@@$$FQAE_KV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@W4enDocType@@W4enApplicationName@@PAVCMDBManager@@@Z)

    de même que celui ci.

    1>schedulerGlobal.obj : error LNK2028: jeton non résolu (0A000262) "void __cdecl BTagger_setup(void)" (?BTagger_setup@@$$FYAXXZ) référencé dans la fonction "public: unsigned __int64 __thiscall CSchedulerGlobal::GlobalAnalyse(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,enum enDocType,enum enApplicationName,class CMDBManager *)" (?GlobalAnalyse@CSchedulerGlobal@@$$FQAE_KV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@W4enDocType@@W4enApplicationName@@PAVCMDBManager@@@Z)

    correspondant à la définition donné ci_dessous:

    void BTagger_setup();

    dont voici le def

        @CDocumentManager@CloseDocument$qv @43  ; CDocumentManager::CloseDocument()
        @CDocumentManager@GoNextBloc$qro @45  ; CDocumentManager::GoNextBloc(bool&)
        @CDocumentManager@InitializePointBloc$qro @44  ; CDocumentManager::InitializePointBloc(bool&)
        @CDocumentManager@OpenDocument$q63_STL@%basic_string$b20_STL@%char_traits$b%18_STL@%allocator$b%% @42  ; CDocumentManager::OpenDocument(_STL::basic_string<wchar_t, _STL::char_traits<wchar_t>, _STL::allocator<wchar_t> >)
        @CDocumentManager@ReadBloc$qp5CBloc @46  ; CDocumentManager::ReadBloc(CBloc *)
        @CDocumentManager@StartReader$q9enDocType @40  ; CDocumentManager::StartReader(enDocType)
        @CDocumentManager@StopReader$qv @41  ; CDocumentManager::StopReader()

    J'ai ainsi 42 externes non résolus/ j'ai mis un a deux exemples de chaque diagnostique représentatif d'un groupe:

    il y a un grand nombre de __cdecl et quelques autres ou il semble que ce soit la syntaxe d'appel qui soit en cause.



    Jean Noël Martin







    vendredi 15 juin 2012 11:12

Réponses

  • Je suis repartie, suite a une erreur de sauvegarde et le problème ne se reproduit pas pour le moment...!

    Elle s'est reproduit au moment ou j'ai introduit la classe CIniFile. Quand je la retire, l'erreur disparait. Je vais donc re-coder la classe CIniFile en introduisant les éléments pas à pas pour observer quand elle se reproduit.

    C'est une petite fonction privée qui est à l'origine de l'erreur

    bool CIniFile::isIniFileOpen()
    {
            return m_bIsOpen;
    };

    Sa déclaration est acceptée, et plus généralement toutes méthodes( y compris un constructeur vide) créent le problème, y compris en partant d'un nouveau fichier. En fait il y avait duplication de la classe CiniFilequi était présent dans le fichier d'include( normal) et dnas le fichier Option.

    class CIniFile
    {
     
    private:       // User declarations
        //Private variable of the class that holds the INI file name
        std::string m_sFileName;
        /* Private variable of the class that holds the reference to the opened
        INI file */
        WfStream m_hIniFile;
        FILE **fIniFile;
        bool CIniFile::isIniFileOpen();


    Jean Noël Martin






    • Marqué comme réponse JeanNoel53 mardi 17 juillet 2012 11:13
    • Non marqué comme réponse JeanNoel53 jeudi 19 juillet 2012 20:05
    • Modifié JeanNoel53 vendredi 20 juillet 2012 06:48
    • Marqué comme réponse JeanNoel53 vendredi 20 juillet 2012 06:48
    mardi 17 juillet 2012 11:13

Toutes les réponses

  • bonjour

    J'attends toujours un éclaircissement sur ce sujet


    Jean Noël Martin

    mercredi 27 juin 2012 06:13
  • Nous sommes face à plusieurs problèmes.

    Le premier est celui lié à la classe BrillTagger.

    En jouant les jésuites, je vous ai indiqué que cette marche à suivre correspond à l'export de fonctions (libres) et non à des méthodes.

    Le gros problème, c'est que le C++ ne standardise pas le "mangling" des méthodes et que Borlande et VC++ utilisent chacun leur tambouille.

    char * __cdecl WorkTagger(char *)

    VC++ -> (?WorkTagger@@$$FYAPADPAD@Z)

    Borland -> @BrillTagger@WorkTagger$qpc

    En plus, j'ai l'impression que le nom pour VC++ est un export "C" de la méthode (__cdecl) et que celui de Borland et un export "C++".

    L'exportation de Classe est ce qu'il y a de plus importable.

    Avez-vous un moyen de faire des exports de fonctions (libres) et non de méthodes ?

    Dans le fichier .def, "LIBRARY     TAGGERCDLL.DLL", je crois qu'il ne faut pas mettre le ".DLL" à la fin. ;-)

    Pour le :

    >all_in_one.obj : error LNK2028: jeton non résolu (0A000AD3) "extern "C" long __stdcall RegOpenKeyExA(struct HKEY__ *,char const *,unsigned long,unsigned long,struct HKEY__ * *)" (?RegOpenKeyExA@@$$J220YGJPAUHKEY__@@PBDKKPAPAU1@@Z)

    je pense que vous avez oublier d'ajouter "Advapi32.lib" à la liste des lib dans les paramètres du linker.

    Pour le :

    1>chunker.obj : error LNK2028: jeton non résolu (0A0001D4) "public: __thiscall COption::~COption(void)" (??1COption@@$$FQAE@XZ) référencé dans la fonction "void __clrcall `dynamic atexit destructor for 'Option''(void)" (???__FOption@@YMXXZ@?A0x41c9b8f6@@$$FYMXXZ)

    "__clrcall" ???

    Vous faites du code managé et COption est une classe managée ???


    Paul Bacelar, Ex - MVP VC++

    mercredi 27 juin 2012 20:12
    Modérateur
  • COption est une classe de C++ avec BCB

    J'ai commencer à intégrer le code de COption dans l'application sans problème.

    Je l'avais sorti en DLL pour contourner les problèmes de taille de BCB. La seule DLL qui pose problème est la dll de Word qui marche bien sous bcb et qui ne compile pas sous Visual Studio C++

    En lisant vos commentaires je conclue que Cdecl est une déclaration de C natif

    J'ai ainsi bien avancé. Pour l'instant je n'ai qu'un seul problème de link résiduel que je cite : 1>Database.obj : error LNK2022: échec de l'opération sur les métadonnées (8013119F) : Un TypeRef existe qui devrait avoir un TypeDef correspondant, mais ne l'a pas : (Document) : (0x01000011).
    1>LINK : fatal error LNK1215: échec de l'opération sur les métadonnées (8013119F) :

    il me parait un peu abscons.

    je vous remercie pour les autres indications  que je vais essayer


    Jean Noël Martin






    jeudi 28 juin 2012 04:04
  • http://msdn.microsoft.com/fr-fr/library/zkf0dz41(v=vs.80).aspx

    Regardez surtout le paragraphe commençant pat "L'erreur LNK2022 peut également se ".

    Utilisez-vous toujours la même version de l'assembly PIA d'Office ?


    Paul Bacelar, Ex - MVP VC++

    jeudi 28 juin 2012 11:45
    Modérateur
  • Je ne sais pas ce que signifie l'assembly PIA d'Office

    Jean Noël Martin

    jeudi 28 juin 2012 12:38
  • PIA = Primary Interop Assemblies

    http://msdn.microsoft.com/en-us/library/aa302338.aspx

    En gros, Office, c'est pas en .NET mais en COM.

    Il y a dans .NET des fonctionnalités intégrées qui permettent de "facilement" appeler des objets COM, comme si cela était des objets .NET (c'est les RWC http://msdn.microsoft.com/en-us/library/5dxz80y2.aspx ).

    Pour cela, les compilateurs .NET sont capables de générer des classes .NET autour des classes COM (wappers).

    Le problème, c'est que ces classes .NET auto-générées ne sont pas forcement très optimales aussi bien en termes d'ergonomie d'utilisations (les préceptes COM et .NET sont un peu différents) qu'en termes de performance.

    Donc, pour éviter d'utiliser ces classes auto-générées, quand on installe un Office, il y a une ou plusieurs dll (des assemblies .NET en fait) qui contiennent les classes .NET d'accès aux objets d'office, ces Dll sont les PIA (les assemblies de références pour faire mumuse avec les objets d'Office via .NET).

    Il y a un ensemble de PIA par version d'Office, peut-être que des Services-Pack qui changent le modèle objets d'Office installent par la même occasion de nouveau PIAs.

    Si vous n'utilisez des assemblies différents lors de la génération des différentes librairies, cela entraine le message d'erreur LNK2022.

    Pour éviter tout problème, utilisez les PIAs à la place des éventuels assemblies auto-générés, et utilisez toujours la même version de PIAs (celle correspondant à la version minimale d'Office supporté).


    Paul Bacelar, Ex - MVP VC++

    • Marqué comme réponse JeanNoel53 jeudi 28 juin 2012 16:36
    • Non marqué comme réponse JeanNoel53 vendredi 29 juin 2012 12:33
    jeudi 28 juin 2012 16:23
    Modérateur
  • il y a une procédure précise dans le lien que vous m'avez donné, mais on se sait pas ou démarrer la procédure. J'ai essayé sur DOS. il m'a jetté.

    Je pense que les commandes doivent être donnée dans une configuration, mail laquelle?

    Excusez moi de poser la question, j'apprécie vos réponse mais on peut chercher longtemps, sans la réponse


    Jean Noël Martin


    jeudi 28 juin 2012 20:19
  • Vous m'avez aussi perdu. :-(

    Il y avait plusieurs problème de link et je vous ai donné des pistes d'investigation pour certaines d'entre elles.

    Vous voulez une réponse à quelle question en particulier ???


    Paul Bacelar, Ex - MVP VC++

    vendredi 29 juin 2012 09:55
    Modérateur
  • sur le lien que vous m'avez cité

    il y a un paragraphe que je cite

    The only tools for making such modifications are ILDASM and ILASM. The process includes the following steps:

    1. Import the type library with Tlbimp as usual.
      TlbImp MyLib.tlb /primary /out:MyLib.dll
      
    2. Use ILDasm to generate MSIL source code for the assembly.
      ILDASM MyLib.dll /out=MyLib.il
      
    3. Modify the MSIL code with your favorite text editor as necessary.
      Notepad MyLib.il
      
    4. Recompile the MSIL using the ILASM compiler.
      ILAsm /DLL /KEY=MyKey.snk MyLib.il 
      

    Step 2 above may also produce a RES file if resources are found in the assembly. If a RES file is generated, it should be compiled back into the assembly in step 4 using the /resource option on ILASM.


    Jean Noël Martin

    vendredi 29 juin 2012 10:07
  • Désolé, le lien fourni est une FAQ qui aborde plein d'aspects des PIA.

    Je l'avais mis en références juste pour la définition de PIA (§ What is a PIA?).

    Le but était d'être conscient du concept de PIA.

    Les message d'erreurs semble montrer que des versions différentes des définitions de classes managées existent dans les différentes lib et assemblies. Choses qui arrivent qu'en un composant utilise le PIA d'une version d'Office et qu'un autre utilise celui d'une autre version d'Office.


    Paul Bacelar, Ex - MVP VC++

    vendredi 29 juin 2012 10:32
    Modérateur
  • J'ai bien compris votre aspect mais pour trouver les références des éléments dans les objets, j'ai deux besoins:

    - trouver ou sont stockés les objets des projets. J'ai modifié la configuration de VS et j'ai mis D:\usr\Memoria\dev\ALN_Kernel\OBJ\$(IntDir)

    et tous les objets se sont retrouvés dans le répertoire D:\usr\Memoria\dev\ALN_Kernel\OBJ\Debug

    - comment appliquer la procédure  que j'ai mis au dessus, ou plus précisément comment dire a VS d'utiliser un PIA


    Jean Noël Martin


    vendredi 29 juin 2012 12:33
  • >et tous les objets se sont retrouvés dans le répertoire D:\usr\Memoria\dev\ALN_Kernel\OBJ\Debug

    on parle bien de ça ?

    http://social.msdn.microsoft.com/Forums/fr-FR/visualcplusfr/thread/14b21afa-a589-4b7d-a3ea-61b3b573f9ce

    Un PIA est, pour VS, un assembly (signé) comme les autres.

    Faites une régénération complète de la solution et recherchez dans les .html des traces de génération le nom de la dll contenant le PIA de Word et vérifiez dans chacun d'eux, qu'il s'agit bien du même fichier.


    Paul Bacelar, Ex - MVP VC++

    lundi 2 juillet 2012 10:42
    Modérateur
  • J'ai compris ce qu'est un PIA mais je ne sait pas le mettre en œuvre.

    Jean Noël Martin

    lundi 2 juillet 2012 15:23
  • Regardez les traces de compilations et vérifier que c'est toujours le même fichier "Microsoft.Office.Interop.Word.dll" qui est utilisé dans tous les projets qui s'en servent.


    Paul Bacelar, Ex - MVP VC++

    lundi 2 juillet 2012 19:04
    Modérateur
  • Actuellement il semble que la dll de word soit une dll de bcb

    Jean Noël Martin

    lundi 2 juillet 2012 19:11
  • Je ne pense pas que la Dll de BCB soit un assembly.

    Il s'agit vraisemblablement du Dll COM ou de wrapper COM.

    Le message d'erreur LNK2022 est plutôt .NET, il y a peut-être génération d'assemblies d'interopérabilité avec des options différentes qui engendres des métadonnées sur les classes différentes.

    La classe COM "Document" de Word semble avoir au moins 2 définitions de métadonnées incompatibles.

    Pouvez-vous vérifier le contenu de ces métadonnées, dans Database.obj et ailleurs ?


    Paul Bacelar, Ex - MVP VC++

    mardi 3 juillet 2012 07:47
    Modérateur
  • J'ai vérifié dans database . il n'y avait que des énumérations que j'ai déplacé

    Jean Noël Martin

    mardi 3 juillet 2012 08:28
  • Heu, les énumérations utilisées pour Office devrait être dans l'assembly d'interopérabilité (PIA), non ?

    Paul Bacelar, Ex - MVP VC++

    mardi 3 juillet 2012 08:35
    Modérateur
  • Je veux bien examiner cette solution, mais je ne sais toujours pas comment configurer le Visual Studio pour qu'il utilise le PIA

    en attendant je mais le code de Database: je ne vois pas ce qu'il contient qui soit en rapport avec le message pour des raisons de taille j'ai scinder l'en tête du fichier du corps du fichier

    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /* Global conception    : 06-12-2003 ; 13:36:57                                                                                   */
    /* Specification        : 05-12-2003 ; 14:54:40                                                                                   */
    /* ALL4TEC                                                                                                                         */
    /* Rue Leonard de vinci                                                                                                           */
    /* 53061 LAVAL CEDEX 09                                                                                                           */
    /* (c) Copyright ALITEC                                                                                                           */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*******************************************************************************
     * NOM:
     * ROLE:
     * HISTORIQUE:
        * 05/05/2001, xxx, initial version
    *******************************************************************************/
    #pragma hdrstop

    /*_____INCLUDE-FILES__________________________________________________________*/
    #include "StdAfx.h"
    #include "Database.h"
    /*_____LOCAL-DEFINE___________________________________________________________*/
    /*_____LOCAL-TYPES____________________________________________________________*/
    /*_____GLOBAL-DATA____________________________________________________________*/

    extern CServer           objCServer;
    extern CInterbaseManager objCInterbaseManager;
    extern std::wstring m_sDBDirectory;
    /*_____LOCAL-DATA_____________________________________________________________*/
    /*_____LOCAL-MACROS___________________________________________________________*/
    /*_____LOCAL-FUNCTIONS-PROTOTYPES_____________________________________________*/
    /*_____GLOBAL-FUNCTIONS_______________________________________________________*/
    using namespace std;
    /*--------------------------------------------------------------------------------------------------------------------------------*/


    Jean Noël Martin


    mardi 3 juillet 2012 08:55
  • la classe CServer

    using namespace std;
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*Class         CServer                                                                                                            */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*Name          CServer                                                                                        */
    /*Role          Class constructor                                                                                                 */
    /*Interface                                                                                                                       */
    /*In            None                                                                                                              */
    /*In/Out        None                                                                                                              */
    /*Result        None                                                                                                              */
    /*Constraints   None                                                                                                              */
    /*Resources     None                                                                                                              */
    /*PreCondition  None                                                                                                              */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    //PROC CServer()
    //DATA
    //ATAD
    //DO
    //  m_wsName 	   := [Empty wide string]
    //  m_enType  	   := DATABASESERVER_NONE
    //  m_wsLogin      := [Empty wide string]
    //	m_wsPassword   := [Empty wide string]
    //  m_enStatus	   := SERVER_DISCONNECTED
    //OD
    CServer::CServer()
    {
      m_wsSrvName = L"";
      m_enSrvType = (enDatabaseServer)DATABASESERVER_NONE;
      m_wsSrvLogin = L"";
      m_wsSrvPassword = L"";
      m_enSrvStatus = (enSERVER_STATUS)SERVER_DISCONNECTED;
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*Name          ~CServer                                                                                               */
    /*Role          Class destructor                                                                                                  */
    /*Interface                                                                                                                       */
    /*In            None                                                                                                              */
    /*In/Out        None                                                                                                              */
    /*Result        None                                                                                                              */
    /*Constraints   None                                                                                                              */
    /*Resources     None                                                                                                              */
    /*PreCondition  None                                                                                                              */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    //PROC ~CServer()
    //DATA
    //ATAD
    //DO
    //OD
    CServer::~CServer()
    {
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*Name          Set<private member variable>                                                                                      */
    /*Role          Set the private member variable to the given value                                                                */
    /*Interface                                                                                                                       */
    /*In            <setting value>                                                                                                   */
    /*In/Out        None                                                                                                              */
    /*Result        None                                                                                                              */
    /*Constraints   None                                                                                                              */
    /*Resources     None                                                                                                              */
    /*PreCondition  CServer object must exist                                                                              */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    //PROC Set<private member variable>(In : <setting value> (same type as the private member variable))
    //DATA
    //ATAD
    //DO
    //  m_<private member variable> := <setting value>
    //OD
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    void CServer::SetName(std::wstring wsName)
    { 
      int len;
      len = wsName.length();
      m_wsSrvName = wsName.assign( wsName.c_str(), 0, len);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    void CServer::SetType(enDatabaseServer enType)
    {
      m_enSrvType = enType;
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    void CServer::SetLogin(std::wstring wsLogin)
    {
      int len;
      len = wsLogin.length();
      m_wsSrvLogin = wsLogin.assign( wsLogin.c_str(), 0, len);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    void CServer::SetPassword(std::wstring wsPassword)
    {
      int len;
      len = wsPassword.length();
      m_wsSrvPassword = wsPassword.assign( wsPassword.c_str(), 0, len);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    void CServer::SetStatus(enSERVER_STATUS enStatus)
    {
      m_enSrvStatus = enStatus;
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*Name          Get<private member variable>                                                                                      */
    /*Role          Get the value of the private member variable                                                                      */
    /*Interface                                                                                                                       */
    /*In            None                                                                                                              */
    /*In/Out        None                                                                                                              */
    /*Result        value of the private member variable                                                                              */
    /*Constraints   None                                                                                                              */
    /*Resources     None                                                                                                              */
    /*PreCondition  CServer object must exist                                                                              */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    //PROC Get<private member variable>(Result : <value of the private member variable> (same type as the private member variable))
    //DATA
    //ATAD
    //DO
    //  <value of the private member variable> := m_<private member variable>
    //OD
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    std::wstring CServer::GetName()
    {
      return(m_wsSrvName);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    enDatabaseServer CServer::GetType()
    {
      return(m_enSrvType);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    std::wstring CServer::GetLogin()
    {
      return(m_wsSrvLogin);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    std::wstring CServer::GetPassword()
    {
      return(m_wsSrvPassword);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    enSERVER_STATUS CServer::GetStatus()
    {
      return(m_enSrvStatus);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*Class         CDatabase                                                                                               */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*Name          CDatabase                                                                                                         */
    /*Role          Class constructor with the type as first parameter                                                                */
    /*Interface                                                                                                                       */
    /*In            enType		Type of database define in the enum enDATABASE_TYPE                                                     */
    /*In/Out        None                                                                                                              */
    /*Result        None                                                                                                              */
    /*Constraints   None                                                                                                              */
    /*Resources     None                                                                                                              */
    /*PreCondition  None                                                                                                              */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    //PROC CDatabase(In: enType (enDATABASE_TYPE))
    //DATA
    //ATAD
    //DO
    //  m_wsDBName			:= [Empty wide string]
    //  m_wsLogin		    := [Empty wide string]
    //  m_wsPassword    := [Empty wide string]
    //  m_enType			  := enType
    //  m_enStatus			:= DATABASE_DISCONNECTED
    //OD
    CDatabase::CDatabase()
    {
      m_wsDBName = L"";
      m_wsLogin = L"";
      m_wsPassword = L"";
      m_enType = MISSION_DATABASE;
      m_enStatus = DATABASE_DISCONNECTED;
    }


    Jean Noël Martin

    mardi 3 juillet 2012 08:58
  • et la classe CDatabase

    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*Name          ~CDatabase                                                                                             */
    /*Role          Class destructor                                                                                                  */
    /*Interface                                                                                                                       */
    /*In            None                                                                                                              */
    /*In/Out        None                                                                                                              */
    /*Result        None                                                                                                              */
    /*Constraints   None                                                                                                              */
    /*Resources     None                                                                                                              */
    /*PreCondition  None                                                                                                              */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    //PROC ~CDatabase()
    //DATA
    //ATAD
    //DO
    //OD
    CDatabase::~CDatabase()
    {
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*Name          Set<private member variable>                                                                                      */
    /*Role          Set the private member variable to the given value                                                                */
    /*Interface                                                                                                                       */
    /*In            <setting value>                                                                                                   */
    /*In/Out        None                                                                                                              */
    /*Result        None                                                                                                              */
    /*Constraints   None                                                                                                              */
    /*Resources     None                                                                                                              */
    /*PreCondition  CDatabase object must exist                                                                            */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    //PROC Set<private member variable>(In : <setting value> (same type as the private member variable))
    //DATA
    //ATAD
    //DO
    //  m_<private member variable> := <setting value>
    //OD
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    std::wstring CDatabase::SetDBName(std::wstring wsDBName)
    {
      wchar_t* TempString;
      std::wstring ReturnDBName;
      wchar_t Temp[12]={0,0,0,0,0,0,0,0,0,0,0,0};
      wchar_t* wTemp =&Temp[0];
      std::wstring wsTemp;
      TempString = objStrConv.NormString( m_sDBDirectory.c_str());
      m_sDBDirectory.assign( TempString);
      wsDBName.copy(  wTemp, 3, 0);
      wsTemp.assign( wTemp);
      if( wsTemp  == L"C:\\" || wsTemp == L"D:\\")
         ReturnDBName.assign( wsDBName);
      else
         ReturnDBName.assign( m_sDBDirectory + (std::wstring)L"\\" + wsDBName);
      return( ReturnDBName);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    void CDatabase::SetLogin(std::wstring wsLogin)
    {
      m_wsLogin = wsLogin;
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    void CDatabase::SetPassword(std::wstring wsPassword)
    {
      m_wsPassword = wsPassword;
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    void CDatabase::SetType(enDATABASE_TYPE enType)
    {
      m_enType = enType;
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    void CDatabase::SetStatus(enDATABASE_STATUS enStatus)
    {
      m_enStatus = enStatus;
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*Name          Get<private member variable>                                                                                      */
    /*Role          Get the value of the private member variable                                                                      */
    /*Interface                                                                                                                       */
    /*In            None                                                                                                              */
    /*In/Out        None                                                                                                              */
    /*Result        value of the private member variable                                                                              */
    /*Constraints   None                                                                                                              */
    /*Resources     None                                                                                                              */
    /*PreCondition  CDatabase object must exist                                                                            */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    //PROC Get<private member variable>(Result : <value of the private member variable> (same type as the private member variable))
    //DATA
    //ATAD
    //DO
    //  <value of the private member variable> := m_<private member variable>
    //OD
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    std::wstring CDatabase::GetDBName()
    {
      return(m_wsDBName);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    std::wstring CDatabase::GetLogin()
    {
      return(m_wsLogin);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    std::wstring CDatabase::GetPassword()
    {
      return(m_wsPassword);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    enDATABASE_TYPE CDatabase::GetType()
    {
      return(m_enType);
    }
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    enDATABASE_STATUS CDatabase::GetStatus()
    {
      return(m_enStatus);
    }


    Jean Noël Martin

    mardi 3 juillet 2012 08:59
  • le header

    /*******************************************************************************
     * NOM:
     * ROLE:
     * HISTORIQUE:
        * 05/05/2001, xxx, initial version
    *******************************************************************************/
    #ifndef DATABASE_H
    #define DATABASE_H
    /*_____INCLUDE-FILES__________________________________________________________*/
    
    #include "AlignStructure.h"
    #include "Language.h"
    #include "Macro.h"
    #include "InterbaseManager.h"
    #include "Enumerations.hpp"
    #include "StrConv.h"
    
    
    
    /*_____GLOBAL-DEFINE__________________________________________________________*/
    
    typedef unsigned short sidDB;
    
    // Database limits
    #define MAX_JOIN            30 // Nombre maximum de jointure (correction FA 37)
    
    // Key word for request
    #define SELECT              L"SELECT "
    #define DELETEFROM          L"DELETE FROM "
    #define STAR                L"*"
    #define INSERT              L"INSERT INTO "
    #define VALUES              L" VALUES"
    #define UPDATE              L"UPDATE "
    #define SET                 L" SET "
    #define FROM                L" FROM "
    #define WHERE               L" WHERE "
    #define DANS                L" IN "
    #define ORDERBY             L" ORDER BY "
    #define AND                 L" AND "
    #define OR                  L" OR "
    #define PB                  L"("
    #define PE                  L")"
    #define CO                  L","
    #define QM                  L"'"
    #define EQ                  L" = "
    #define DOT                 L"."
    #define COUNTSTAR           L"COUNT(*)"
    #define COUNT_PB_DIST       L"COUNT (DISTINCT "
    #define SUM_PB              L"SUM("
    #define ISNULL              L" IS NULL"
    #define NULLVALUE           L"NULL"
    #define BLANK               L" "
    #define ASRESULT            L" as LM_Result"
    
    #define DIFFERENT           L" <> "
    #define GREATER             L" > "
    #define LOWER               L" < "
    #define GREATER_EQ          L" >= "
    #define LOWER_EQ            L" <= "
    
    #define INC1                L" + 1"
    
    #define ZEROVALUE           0
    
    // Lemma status
    #define LEM_ST_NOT_EXCLUDED 0
    #define LEM_ST_EXCLUDED     1
    
    // Word  and NGram occurence
    #define FIRST_OCCURRENCE    1
    
    // Segment alignment status
    #define SEG_AL_ST_UNDEF     0
    #define SEG_AL_ST_EXCLUDED  1
    #define SEG_AL_ST_NOALIGNED 2
    #define SEG_AL_ST_ALIGNED   3
    
    // Chunk alignment status
    #define CHK_AL_ST_UNDEF     0
    #define CHK_AL_ST_EXCLUDED  1
    #define CHK_AL_ST_NOALIGNED 2
    #define CHK_AL_ST_ALIGNED   3
    
    // Segment link alignment status
    #define SEG_LNK_AL_ST_UNDEF 0
    #define SEG_LNK_AL_ST_MANU  1
    #define SEG_LNK_AL_ST_AUTO  2
    
    // Chunk link alignment status
    #define CHK_LNK_AL_ST_UNDEF 0
    #define CHK_LNK_AL_ST_MANU  1
    #define CHK_LNK_AL_ST_AUTO  2
    
    // General Values For AlignmentStatus
    #define AL_ST_UNDEF      0
    #define AL_ST_EXCLUDED   1
    #define AL_ST_NOALIGNED  2
    #define AL_ST_MANU       3
    #define AL_ST_AUTO       4
    #define AL_ST_FORMER     5
    
    
    // Group values
    #define GRP_FALSE 0
    #define GRP_TRUE  1
    
    // Key word for table names
    #define WI_TABLE            L"T_WORK_INFORMATION"
    #define SC_TABLE            L"T_SEG_CHUNK"
    #define SW_TABLE            L"T_SEG_WORD"
    #define WORD_TABLE          L"T_WORD"
    #define LEM_TABLE           L"T_LEMMA"
    #define ELEMENT_CHK         L"T_ELEMENT_CHK"
    #define ELEMENT_LNK_TABLE   L"T_ELEMENT_LINKS"
    #define ELEMENT_TABLE       L"T_ELEMENT_SEMANTIQUE"
    #define SEG_TABLE           L"T_SEGMENT"
    #define CLUES_TABLE         L"T_CLUES"
    #define LAYOUT_TABLE        L"T_LAYOUT"
    #define CHK_TABLE           L"T_CHUNK"
    #define CT_TABLE            L"T_CHUNK_TYPE"
    #define CW_TABLE            L"T_CHUNK_WORD"
    #define PARA_TABLE          L"T_PARAGRAPH"
    
    // Key word for attributes of table CLUES
    #define CLUES_ID_CLUES      L"nuIdClues"
    #define CLUES_EXT_SCORES    L"siExternalScore"
    #define CLUES_INT_SCORES    L"siInternalScore"
    #define CLUES_NB_NGRAM      L"siNbNgram"
    #define CLUES_NB_NUMBER     L"siNbNumber"
    
    // Key word for attributes of table LAYOUT
    #define LAYOUT_ID_LAYOUT      L"nuIdLayout"
    #define LAYOUT_IN_ARRAY       L"cInArray"
    #define LAYOUT_ID_STYLE_NAME  L"siIdStyleName"
    #define LAYOUT_ID_FONT_NAME   L"siIdFontName"
    #define LAYOUT_FONT_SIZE      L"siFontSize"
    #define LAYOUT_BOLD           L"cBold"
    #define LAYOUT_ITALIC         L"cItalic"
    #define LAYOUT_UNDERLINE      L"cUnderline"
    #define LAYOUT_UPPERCASE      L"cUpperCase"
    #define LAYOUT_FG_COLOR       L"iFGColor"
    #define LAYOUT_BG_COLOR       L"iBGColor"
    
    // Key word for attributes of table STYLE_NAME
    #define STYLE_N_ID_STYLE_NAME L"siIdStyleName"
    #define STYLE_N_LABEL          L"vcLabel"
    
    // Key word for attributes of table FONT_NAME
    #define FONT_N_ID_FONT_NAME   L"siIdFontName"
    #define FONT_N_LABEL          L"vcLabel"
    
    // Key word for attributes of table SEGMENT
    #define SEG_ID_SEG          L"nuIdSeg"
    #define SEG_TYPE            L"cType"
    #define SEG_ALIGN_STATUS    L"cAlignStatus"
    #define SEG_NOT_RECOMPOSED  L"cNotRecomposed"
    #define SEG_COVERAGE        L"siCoverage"
    #define SEG_INIT_POS        L"iInitPos"
    #define SEG_SIZE_IN_CHAR    L"siSizeInChar"
    #define SEG_SIZE_IN_WORDS   L"siSizeInWords"
    #define SEG_ID_PREV         L"nuIdPrev"
    #define SEG_ID_NEXT         L"nuIdNext"
    #define SEG_ID_LAYOUT       L"nuIdLayout"
    #define SEG_ID_CLUES        L"nuIdClues"
    #define SEG_ID_DOC          L"siIdDoc"
    #define SEG_TYPE_DOC        L"siIdTypD"
    #define SEG_ID_LANG         L"siIdLang"
    
    // Key word for attributes of table SEGMENT_WORD
    #define SW_ID_SEG_WORD      L"nuIdSegWord"
    #define SW_ID_SEG           L"nuIdSeg"
    #define SW_ID_WORD          L"nuIdWord"
    #define SW_WORD_RANK        L"siWordRank"
    #define SW_CHUNK_NUM        L"siChunkNum"
    #define SW_ID_LAYOUT        L"nuIdLayout"
    #define SW_WORD_ADAPT       L"cWordAdapted"
    
    // Key word for attributes of table SEG_CHUNK
    #define SC_ID_SEG_CHK       L"nuIdSegChk"
    #define SC_ID_SEG           L"nuIdSeg"
    #define SC_ID_CHUNK         L"nuIdChunk"
    #define SC_INIT_POS         L"iInitPos"
    #define SC_ID_PREV          L"nuIdPrev"
    #define SC_ID_NEXT          L"nuIdNext"
    #define SC_MATCH_STATUS     L"cMatchStatus"
    #define SC_ALIGN_STATUS     L"cAlignStatus"
    
    // Key word for attributes of table T_SEG_ELEMENT
    #define SN_ID_SEGNGRAM      L"nuIdSegNGram"
    #define SN_ID_SEG           L"nuIdSeg"
    #define SN_ID_NGRAM         L"nuIdNGram"
    
    // Key word for attributes of table SEG_GROUP
    #define SG_ID_SEGGRP        L"nuIdSegGrp"
    #define SG_ID_GRP           L"nuIdGrpSeg"
    #define SG_ID_SEG           L"nuIdSeg"
    #define SG_SEG_RANK         L"siSegRank"
    
    // Key word for attributes of table ELEMENT_SEMANTIQUE
    #define SEMANTIQUE_ID_ELEMN L"nuIdElemn"
    #define TYPE_ELEMENT        L"nuIdTypeElement"
    #define SN_NB_CHUNK         L"SiNbChunk"
    #define ELEMENT_OCCURRENCE  L"NuIdOccurence"
    #define VC_NAME             L"vcName"
    #define WS_TEXTE            L"wsText"
    #define ELMN_FONCTIONNEMENT L"NuIdFonctionnelement"
    #define ELEMENT_ID_DOC      L"siIdD"
    #define ELEMENT_ID_LANG     L"siIdLang"
    
    
    // Key word for attributes of table ELEMENT_WORD
    #define NW_ID_ELEMENT_WORD  L"nuIdElemntWord"
    #define NW_ID_ELEMENT       L"nuIdElemnt"
    #define NW_ID_WORD          L"nuIdWord"
    #define NW_WORD_RANK        L"siWordRank"
    
    // Key word for attributes of table ELEMENT_CHK
    #define EC_ID_ELEMN_CHK     L"nuIdElemnChk"
    #define EC_ID_ELEMN         L"nuIdElemn"
    #define EC_ID_CHK           L"nuIdChunk"
    #define EC_CHUNK_RANK       L"siChkRank"
    
    // Key word for attributes of table ELEMENT_LINKS
    #define NL_ID_ELEMN_LNK     L"nuIdElemnLink"
    #define NL_ID_ELEMN_SRC     L"nuIdElemnSrc"
    #define NL_ID_PARAGRAPH     L"nuIdParagraph"
    #define NL_ID_DOC           L"iIdDoc"
    #define VC_NAME             L"vcName"
    
    // Key word for attributes of table CHUNK
    #define CHK_ID_CHK          L"nuIdChunk"
    #define CHK_NB_WORD         L"siNbWord"
    #define CHK_ID_CHK_TYPE     L"nuIdChunkType"
    #define CHK_TEXT            L"vcText"
    #define CHK_ID_CHK_DRV_POS  L"nuIdDrivingPos"
    #define CHK_ID_LANG         L"siIdLang"
    
    // Key word for attributes of table CHUNK_TYPE
    #define CT_ID_CHK_TYPE      L"nuIdChunkType"
    #define CT_LABEL            L"vcLabel"
    
    // Key word for attributes of table CHUNK_WORD
    #define CW_ID_CHK_WORD      L"nuIdChkWord"
    #define CW_ID_CHUNK         L"nuIdChunk"
    #define CW_ID_WORD          L"nuIdWord"
    #define CW_WORD_RANK        L"siWordRank"
    
    // Key word for attributes of table CHUNK_GROUP
    #define CG_ID_CHKGRP        L"nuIdChkGrp"
    #define CG_ID_GRP           L"nuIdGrpChunk"
    #define CG_ID_CHUNK         L"nuIdChunk"
    #define CG_CHUNK_RANK       L"siChkRank"
    
    // Key word for attributes of table WORD
    #define WORD_ID_WORD        L"nuIdWord"
    #define WORD_STRING         L"vcString"
    #define WORD_OCCURRENCE     L"siOccurrence"
    #define WORD_ID_LANG        L"siIdLang"
    #define WORD_ID_LEMMA       L"nuIdLemma"
    
    // Key word for attributes of table LEMMA
    #define LEM_ID_LEMMA        L"nuIdLemma"
    #define LEM_STRING          L"vcString"
    #define LEM_EXCLUDED        L"cExcluded"
    #define LEM_ID_POS          L"siIdPOS"
    #define LEM_ID_GENDER       L"siIdGender"
    #define LEM_ID_LANG         L"siIdLang"
    #define LEM_ID_TYP_DOC      L"siIdTypD"  //SIIDTYPD
    #define LEM_ID_DOC          L"siIdD"
    
    // Key word for attributes of table WORK_INFORMATION
    #define WI_DOCUMENT         L"vcDocument"
    #define WI_ID_SRC_LANG      L"siIdSrcLang"
    #define WI_ID_TYPE_LANG      L"siIdTypDoc"
    #define WI_ID_DOC           L"siIdDocument"
    // Key word for attributes of table PARA_TABLE
    #define PA_ID               L"nuIdPar"
    #define PA_IDENT            L"vcLabel"
    #define PA_TEXT             L"vcPar"
    #define PA_DOCID            L"iIdDoc"
    // Key word for ini file reading
    #define SECTION_DB_SCRIPT   L"DB_SCRIPTS"
    #define KEYNAME_CREATION_MISSION_DB_SCRIPT L"CREATE_MDB_SQL"
    
    /*_____GLOBAL-TYPES___________________________________________________________*/
    
    
    
    
    
    
    
    /*_____GLOBAL-DATA____________________________________________________________*/
    static enSERVER_STATUS       m_enSrvStatus;     //Status of the server in the enum enSERVER_STATUS
    static enDatabaseServer      m_enSrvType;       //Type of server define in the enum enDatabaseServer
    static std::wstring          m_wsSrvName;       //Name of the server.
    static std::wstring          m_wsSrvLogin;      //Login of the user
    static std::wstring          m_wsSrvPassword;   //Password string of the user
    static std::wstring          m_wsName;          //Name of the server.
    static std::wstring          m_wsDBName;
    static std::wstring          m_wsLogin;         //Login of the user
    static std::wstring          m_wsPassword;      //Password string of the user
    static std::wstring          m_wsHost;
    static std::wstring          m_wsUserName;
    static std::wstring          m_wsDescription;   //Description text (free field)
    static enDATABASE_STATUS     m_enStatus;        //Status of the server in the enum enSERVER_STATUS
    static enDATABASE_TYPE       m_enType;          //Type of server define in the enum enDatabaseServer
    
    
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*Class         CServer                                                                                                            */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    //DATA
    //  CLASS CServer
    //    (Private)
    //	    m_wsName    		Name of the server.
    //	    m_enType     		Type of server define in the enum enDatabaseServer
    //	    m_wsLogin   		Login of the user
    //      m_wsPassword        Password string of the user
    //	    m_enStatus	    	Status of the server in the enum enSERVER_STATUS
    ////	m_wsDescription		Description text (free field)
    class CServer
    {
      public:
        CServer();
        ~CServer();
        void SetName(std::wstring wsName);
        void SetType(enDatabaseServer enType);
        void SetLogin(std::wstring wsLogin);
        void SetPassword(std::wstring wsPassword);
        void SetStatus(enSERVER_STATUS enStatus);
        std::wstring GetName();
        enDatabaseServer GetType();
        std::wstring GetLogin();
        std::wstring GetPassword();
        enSERVER_STATUS GetStatus();
    
      private:
    
    };
    //ATAD
    
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    /*Class         CDatabase                                                                                               */
    /*--------------------------------------------------------------------------------------------------------------------------------*/
    //DATA
    //  CLASS CDatabase
    //    (Private)
    //    m_wsDBName			  	Name of the database.
    //    m_enType     				Type of database define in the enum enDATABASE_TYPE
    //	  m_wsLogin   		  		Login of the user for this database
    // 	  m_wsPassword      		Password string of the user for this database
    //	  m_enStatus	    		Status of the database in the enum enDATABASE_STATUS
    ////  m_wsDescription		    Description text (free field)
    class CDatabase
    {
      public:
        CDatabase();
        ~CDatabase();
        std::wstring SetDBName(std::wstring wsDBName);
        void SetLogin(std::wstring wsLogin);
        void SetPassword(std::wstring wsPassword);
        void SetType(enDATABASE_TYPE enType);
        void SetStatus(enDATABASE_STATUS enStatus);
        std::wstring GetDBName();
        std::wstring GetLogin();
        std::wstring GetPassword();
        enDATABASE_TYPE GetType();
        enDATABASE_STATUS GetStatus();
    
      private:
    
    };


    Jean Noël Martin

    mardi 3 juillet 2012 09:10
  • enfin la déclaration des objets

    extern CDatabase           objCDatabase;
    extern CServer             objCServer;


    Jean Noël Martin

    mardi 3 juillet 2012 09:11
  • J'ai fini par identifier les données qui posent problème. ce sont des données que j'avais mises en global pour tourner un problème du compilateur BCB. Je les ai mis en public dans la classe d'initialisation. mais le problème les a suivi. pourtant ce sont des données basiques je vous les donne ci dessous:

      public:
    	  short m_shBoldScoreOM;                      //  Score when the two element are in Bold
    	  short m_shFontsizeScoreOM;                  //  Score when the font size of two element are identical
    	  short m_shFontNameScoreOM;                  //  Score when the Font Name of two element are identical
    	  short m_shItalicScoreOM;                    //  Score when the two element are in Italic
    	  short m_shUnderlineScoreOM;                 //  Score when the two element are Underlined
    	  short m_shColorScoreOM;                     //  Score when the two element have the same Color
    	  short m_shUpperCaseScoreOM;                 //  Score when the two element are in Uppercase
    	  short m_shInArrayScoreOM;                   //  Score when the two element are in an Array
    	  short m_shNgramsScoreOM;                    //  Score when source and target element Ngrams clue are considered as identical
    	  short m_shDeepExternalAlignmentScoreOM;     //  Score when source and target element DeepExternalAlignment clue are considered as identical
    	  short m_shExternalScoreOM;                  //  Score when source and target element External clue are considered as identical
    	  short m_shInternalScoreOM;                  //  Score when source and target element Internal clue are considered as identical
    	  short m_shWordScoreOM;                      //  Score when source and target element word number are considered as identical
    	  short m_shNumberScoreOM;                    //  Score when source and target element number clue are considered as identical
    	  short m_shCharScoreOM;                      //  Score when source and target element char number are considered as identical
    	  short                             m_shSourceTargetSegmentLengthRatioScoreOM;
    	  short                             m_shSameChunkTypeScoreOM;
    	  short                             m_shDeepExternalAlignmentThresholdOM; //  Threshold that indicates that the difference between the deep external clue scores found in source and target element are considered as identical
    	  short                             m_shRelativeSameNgramsThresholdOM;    //  Threshold that indicates that the difference between the ngrams clue scores found in source and target element are considered as identical
    	  short                             m_shRelativeSameNumberThresholdOM;    //  Threshold that indicates that the difference between the number clue scores found in source and target element are considered as identical
    	  short                             m_shRelativeSameWordThresholdOM;      //  Threshold that indicates that the difference between the word number found in source and target element are considered as identical
    	  short                             m_shRelativeSameCharThresholdOM;      //  Threshold that indicates that the difference between the char number found in source and target element are considered as identical
    	  short                             m_shNumberOfLemmaRatioOM;
    	  short                             m_shPosMarkRatioOM;
    	  short                             m_shLinguisticRatioOM;
    	  short                             m_shSameMarkScoreOM;
    	  short                             m_shLemmaEqualNumbersScoreOM;
    	  short                             m_shSameWordScoreOM;
    	  short                             m_shSameWordStartingScoreOM;
    	  short                             m_shProbaMatchThresholdOM;
    	  short                             m_shTranslationScoreOM;
    	  short                             m_shHalfTranslationScoreOM;
    	  short                             m_shNumberScoreThresholdOM;
    	  short                             m_shWordScoreThresholdOM;
    	  short                             m_shMaxSizeDiffBetweenChunkTypeListOM;
    	  short                             m_shStyleNameScoreOM;
    	  short                             m_shRelativeSameExternalThresholdOM;
    	  short                             m_shRelativeSameInternalThresholdOM;
    	  short                             shCurrentBestScore;
    	  short                             shCounter;
    
    	  hidDB                             m_hidPreviousChunkID;     // Variable used to know to which chunk the m_ListSourceLemmaIDs corresponds
    	  long                              m_lInitialPosition;
    
    	  bool                              bSourceDisplayed;
    	  bool                              bTargetDisplayed;
    	  bool                              m_bIsQuitConfirmed;
    	  bool                              m_bDeepExternalAlignmentOM;
    	  bool                              m_bMMIMode;
    	  bool                              m_bIsDatabaseOpen;
    	  bool                              m_bOptionProblem;
    	  bool                              m_bServerConnected;         //Boolean that indicate if the server is connected
    
    	  enLanguage                        m_Language;
    	  enStatusDocument                  enDocumentType;
    	  std::wstring                      m_sMMILanguage;
    	  std::wstring                      m_sSourceFileName;
    	  std::wstring                      m_sSourceLanguage;
    	  std::wstring                      m_sDisplayTypeOfSegs;
    	  std::wstring                      m_sDisplayTypeOfChunks;
    	  std::wstring                      m_sDatabasePath;
    	  std::wstring                      m_sDatabaseFilename;
    	  std::wstring                      m_sLanguageOfSelectedSeg;
    	  std::wstring                      m_sDBDirectory;
    	  std::wstring                      wsDatabaseLastRefSource;
    	  std::wstring                      wsDatabaseLastRefTarget;
    	  std::wstring                      wsServerLogin; // Server login name
    	  std::wstring                      wsServerPswd;  // Server login password
    	  std::wstring                      wsLocalServerName;
    	  std::wstring                      sLogFile;
    	  std::wstring                      sSavedLogFile;
    
    	  int                               iSourceId;
    	  int                               iTargetId;
    	  int                               iIdDoc;
    	  int                               iCount;
    	  int                               iCount2;
    	  int                               nWords;
    	  int                               iPtr;
    	  int                               iNumFormula;
    	  int                               iNumEntity;
    	  int                               m_iRowCoordinate;
    	  int                               m_iColCoordinate;


    Jean Noël Martin

    mardi 3 juillet 2012 11:04
  • Pouvez-vous utiliser l'option /P (http://msdn.microsoft.com/fr-fr/library/8z9z0bx6(v=vs.100).aspx) sur le fichier Database.cpp pour savoir d'où vient la classe Document

    Paul Bacelar, Ex - MVP VC++

    mardi 3 juillet 2012 11:50
    Modérateur
  • Ce lien  ne marche pas

    Jean Noël Martin

    mardi 3 juillet 2012 16:59
  • Désolé, le ")" c'est mis subrepticement dans l'URL. ;-)

    http://msdn.microsoft.com/fr-fr/library/8z9z0bx6(v=vs.100).aspx


    Paul Bacelar, Ex - MVP VC++


    mercredi 4 juillet 2012 08:02
    Modérateur
  • J'avance dans mon diagnostic. J'ai trouvé une structure entre deux module qui était redéfinie. J'ai unifié les fichiers mais il ne sont pas acceptés par le compilateur et je ne comprend pas pourquoi.

    le fichier de déclaration, bien vu par Visual Studio

    class CLayout
    {
       public:
    	   bool              IsValid;
           std::wstring      wsStyleName;              //  Nom du style, si ce n'est pas uniforme, on ne met rien dans le wsStyleName
           std::wstring      wsFontName;               //  Nom de la fonte, si ce n'est pas uniforme, on ne met rien dans le wsFontName
           long              lFontSize;                //  Taille de la fonte, si ce n'est pas uniforme, on met FONTSIZE_NOT_HOMOGENEOUS
           enBold            Bold;		                  //  L'élément est en gras
           enItalic          Italic;		                //  L'élément est en italique
           enUnderline       Underline;                //  L'élément est souligné
           enUppercase       Uppercase;                //  L'élément est en majuscule
           long              lForegroundColor;         //  Couleur de l'element, si ce n'est pas uniforme, on met FOREGROUNDCOLOR_NOT_HOMOGENEOUS
           long              lBackgroundColor;         //  Couleur de fond de l'element, si ce n'est pas uniforme, on met BACKGROUNDCOLOR_NOT_HOMOGENEOUS
           bool              bInArray;                 //  L'element fait partie d'un tableau
    	   CLayout::CLayout();
    	   CLayout::~CLayout();
    	   bool CLayout::isConsistent( wchar_t* Name);
    	   CLayout* CLayout::NormLayout( CLayout* pLayout);
    };

    et  l'un des fichiers utilisateurs

    class CElement
    {
     public:
      std::wstring wsElementText;
      CLayout *pLayout;
      CElement()
      {
         pLayout = NULL;
      }
      ~CElement()
      {;}
    };

    avec le diagnostic du compilateur

    D:\usr\Memoria\dev\Linguistic\ParserManager\com\ParserManager.h(56): error C2143: erreur de syntaxe : absence de ';' avant '*' sur le symbole de CLayout


    Jean Noël Martin

    mercredi 4 juillet 2012 09:13
  • C'est quelle ligne la 56 ???

      {;}
    ???

    C'est pas plutôt :

     ~CElement(){};


    Paul Bacelar, Ex - MVP VC++

    mercredi 4 juillet 2012 09:37
    Modérateur
  • la ligne qui commence par CLayout

    J'ai tourné ce problème en changeant les nom des fichiers d'include????

    J'ai mis l'option /P dans la ligne de commande du préprocesseur

    et j'en suis exactement au même point avec mon erreur LNK2022 alors que toutes les déclaration sont en commentaire

    le ~Celement(){;}; dit que le destructeur ne fait rien


    Jean Noël Martin



    • Modifié JeanNoel53 mercredi 4 juillet 2012 10:51
    mercredi 4 juillet 2012 10:32
  • Si vous avez encore réussi à compiler et linker avec cette option, c'est que vous n'avez que recompilé et relinké le résultat d'avant.

    L'option /P arrête la compilation à la fin du pre-processing en générant des fichiers en ".i".

    Regardez le contenu de Database.i en cherchant la classe "Document", le fichier doit donner les indications sur la source de la déclaration de la classe.

    P.S.: Pensez à enlever cette option quand vous aurez cette information. ;-))


    Paul Bacelar, Ex - MVP VC++

    mercredi 4 juillet 2012 12:46
    Modérateur
  • Je n'arrive pas à trouver la <span data-guid="5cc1e2154861bbc39a60ce2b6b9883c2" data-source="Modify the Generate Preprocessed File property.

    Génération du fichier prétraité.

    Dans la Generate Preprocessed File property.

    Dans la configuration

    Je l'ai mis dans Définition du préprocesseur non défini et ça va jusqu’au link.

    Je continue à travailler dans 2 directions. J'ai 53 erreurs de link qui sont pour l'essentiel des problèmes d'interfaces mal définies en C++... toujours la permissivité de BCB. et je cherche la bonne application de l'option P


    Jean Noël Martin


    • Modifié JeanNoel53 vendredi 6 juillet 2012 15:00
    vendredi 6 juillet 2012 14:41
  • C'est une option de compilation (malgré le fait que c'est le préprocesseur qui si cogne), pas une définition du préprocesseur.

    Sélectionnez Database.cpp dans l'explorateur de solution -> Click Droit -> Propriétés -> Propriétés de configuration -> C/C++ -> Ligne de commande -> Options Supplémentaires -> y mettre "/P" (sans les quotes ;-))

    re P.S.: Pensez à enlever cette option quand vous aurez cette information. ;-))


    Paul Bacelar, Ex - MVP VC++

    vendredi 6 juillet 2012 17:14
    Modérateur
  • Je fais donc une réponse en deux temps: j'ai avancé par tâtonnement dans l'identification des causes de duplication de données. Le code de Database n'est plus en cause, le code de Layout est maintenant en première ligne.voir les messages d'erreur de la génération:

    1>Analyse.obj : error LNK2022: échec de l'opération sur les métadonnées (8013118D) : Informations de disposition incohérentes dans des types dupliqués (CLayout) : (0x02000108).
    1>chunker.obj : error LNK2022: échec de l'opération sur les métadonnées (8013118D) : Informations de disposition incohérentes dans des types dupliqués (CLayout) : (0x02000128).
    1>computingForAlignment.obj : error LNK2022: échec de l'opération sur les métadonnées (8013118D) : Informations de disposition incohérentes dans des types dupliqués (CLayout) : (0x02000100).
    1>segmentation.obj : error LNK2022: échec de l'opération sur les métadonnées (8013118D) : Informations de disposition incohérentes dans des types dupliqués (CLayout) : (0x02000111).
    1>ParserManager.obj : error LNK2022: échec de l'opération sur les métadonnées (8013118D) : Informations de disposition incohérentes dans des types dupliqués (CLayout) : (0x02000115).

    par la suite j'ai appliqué votre consigne au code de Layout.cpp et j'ai eu le message suivant

    1>..\..\..\..\Common\src\Layout.cpp(9): fatal error C1083: Impossible d'ouvrir le fichier includeá: 'StdAfx.h'á: No such file or directory

    Quant au fichier Layout.i il me parrait peu indicatif:

    #line 1 "..\\..\\..\\..\\Common\\src\\Layout.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll>
    #line 1 "..\\..\\..\\..\\Common\\src\\Layout.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll>
    #line 1 "..\\..\\..\\..\\Common\\src\\Layout.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll>
    #line 1 "..\\..\\..\\..\\Common\\src\\Layout.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Drawing.dll>
    #line 1 "..\\..\\..\\..\\Common\\src\\Layout.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Windows.Forms.dll>
    #line 1 "..\\..\\..\\..\\Common\\src\\Layout.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.dll>
    #line 1 "..\\..\\..\\..\\Common\\src\\Layout.cpp"

    d'ailleurs tous les fichier .i ont la même forme

    #line 1 "..\\..\\..\\..\\Linguistic\\Analyser\\src\\Analyse.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll>
    #line 1 "..\\..\\..\\..\\Linguistic\\Analyser\\src\\Analyse.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll>
    #line 1 "..\\..\\..\\..\\Linguistic\\Analyser\\src\\Analyse.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll>
    #line 1 "..\\..\\..\\..\\Linguistic\\Analyser\\src\\Analyse.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Drawing.dll>
    #line 1 "..\\..\\..\\..\\Linguistic\\Analyser\\src\\Analyse.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Windows.Forms.dll>
    #line 1 "..\\..\\..\\..\\Linguistic\\Analyser\\src\\Analyse.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.dll>
    #line 1 "..\\..\\..\\..\\Linguistic\\Analyser\\src\\Analyse.cpp"

    et j'ai résolue tous les unresolvables il m'en reste 20 qui sont liés aux fichiers qui sont bloqués par les Lnk2022

    et quand je dois mettre le fichier IniFile.cpp L'option P me met le même diagnostic

    #line 1 "..\\..\\..\\..\\Utility\\IniFileManager\\src\\IniFile.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll>
    #line 1 "..\\..\\..\\..\\Utility\\IniFileManager\\src\\IniFile.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll>
    #line 1 "..\\..\\..\\..\\Utility\\IniFileManager\\src\\IniFile.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll>
    #line 1 "..\\..\\..\\..\\Utility\\IniFileManager\\src\\IniFile.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Drawing.dll>
    #line 1 "..\\..\\..\\..\\Utility\\IniFileManager\\src\\IniFile.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Windows.Forms.dll>
    #line 1 "..\\..\\..\\..\\Utility\\IniFileManager\\src\\IniFile.cpp"
    #using <C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.dll>
    #line 1 "..\\..\\..\\..\\Utility\\IniFileManager\\src\\IniFile.cpp"


    Jean Noël Martin




    samedi 7 juillet 2012 08:18
  • Pouvez-vous utiliser les outils de refactoring de VS pour renommer globalement une à une les classes dans ces fichiers cpp, avec un nom des plus improbable de préférence ?

    Si le nombre d'erreurs diminue à chaque fois, c'est juste des collisions de nom/namespace avec d'autres classes.

    Vérifiez alors que les namespaces sont cohérents.


    Paul Bacelar, Ex - MVP VC++

    mardi 10 juillet 2012 08:00
    Modérateur
  • J'ajoute a cela une incompréhension sur les unresolved. je vais essayer le refactoring, mais j'ai des messages contradictoire que je vous indique dans l'attente

    le code ci dessous a générer le message ci-dessous:

    std::wstring CServer::GetName()
    {
      return(m_wsSrvName);
    }

    en outre je n'ai pas trouvé la commande pour refactorer

    MissionDatabaseManager.obj : error LNK2028: jeton non résolu (0A000452) "public: class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > __thiscall CServer::GetName(void)" (?GetName@CServer@@$$FQAE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@XZ) référencé dans la fonction "public: unsigned __int64 __thiscall CMDBManager::CreateDatabase(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,enum enDatabaseServer,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,enum enLanguage,enum enStatusDocument)" (?CreateDatabase@CMDBManager@@$$FQAE_KV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@W4enDatabaseServer@@00W4enLanguage@@W4enStatusDocument@@@Z)


    Jean Noël Martin


    • Modifié JeanNoel53 mercredi 11 juillet 2012 19:59
    mercredi 11 juillet 2012 19:54
  • Pouvez-vous poster des extraits de CMDBManager.i (avec l'option /P du compilateur) qui donne la définition de CServer::GetName et l'implmentation de "public: unsigned __int64 __thiscall CMDBManager::CreateDatabase( ...)" ?

    Paul Bacelar, Ex - MVP VC++

    jeudi 12 juillet 2012 09:12
    Modérateur
  • Je suis repartie, suite a une erreur de sauvegarde et le problème ne se reproduit pas pour le moment...!

    Elle s'est reproduit au moment ou j'ai introduit la classe CIniFile. Quand je la retire, l'erreur disparait. Je vais donc re-coder la classe CIniFile en introduisant les éléments pas à pas pour observer quand elle se reproduit.

    C'est une petite fonction privée qui est à l'origine de l'erreur

    bool CIniFile::isIniFileOpen()
    {
            return m_bIsOpen;
    };

    Sa déclaration est acceptée, et plus généralement toutes méthodes( y compris un constructeur vide) créent le problème, y compris en partant d'un nouveau fichier. En fait il y avait duplication de la classe CiniFilequi était présent dans le fichier d'include( normal) et dnas le fichier Option.

    class CIniFile
    {
     
    private:       // User declarations
        //Private variable of the class that holds the INI file name
        std::string m_sFileName;
        /* Private variable of the class that holds the reference to the opened
        INI file */
        WfStream m_hIniFile;
        FILE **fIniFile;
        bool CIniFile::isIniFileOpen();


    Jean Noël Martin






    • Marqué comme réponse JeanNoel53 mardi 17 juillet 2012 11:13
    • Non marqué comme réponse JeanNoel53 jeudi 19 juillet 2012 20:05
    • Modifié JeanNoel53 vendredi 20 juillet 2012 06:48
    • Marqué comme réponse JeanNoel53 vendredi 20 juillet 2012 06:48
    mardi 17 juillet 2012 11:13