IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Migration VC6.0 vers VC2008


Sujet :

Visual C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut Migration VC6.0 vers VC2008
    Bonjour à tous,

    Dans le cadre d'un projet professionnel, on me demande de migrer de VC6.0 vers VC2008.
    Le projet contient de tout, C, C++, MFC, il y a même une petite partie java, sans parler des macro qui rendent le code "magique" () ainsi que des multiples options de compilation (post build process - option au link, build etc..) bref, un truc assez complet..
    Je n'ai pas de questions précises, si ce n'est:

    Quelqu'un a t il déjà fait ce genre de migration?
    Quels sont les points à regarder en particulier?
    Vais je rencontrer de grosse difficultés... ?
    Finalement, y a t il un endroit sur la toile où je pourrais trouver des aides par rapport à cette migration?

    Merci pour vos réponses,

    Francois

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    déjà vc2008 permet la migration du projet (comme vc2005) .
    ensuite tout dépend du code.
    si il utilise beaucoup la stl il peut y avoir quelques problème à la compilation.
    sinon tu peux aussi consulter mon tuto sur le sujet pour les erreurs courantes
    l'autre point épineux c'est l'utilisation ou non de bibliothèques tierces.
    il vaudrait mieux que tout soit reconstruit avec vc2008 .
    sinon je suis en train de migrer des projets qui fonctionnent sous vc6 et vc2005
    je n'ai pas de probléme particulier ,si ce n'est en debug ou j'ai un message l'autre monde qui m'empêche d'exécuter l'application...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Bonjour à toi,

    Tout d'abord, merci beaucoup pour ta réponse rapide.
    Je savais que vc2008 dispose d'un outil de migration mais je n'en connais pas la puissance et j'avais un peu peur car on saute quand même de la 6.0 à la 9.0..
    Selon toi il semblerait qu'il soit relativement performant, cela me rassure .

    Sinon on utilise assez bien la stl, mais pas trop de bibliothèques tierces.

    Merci pour ton tuto, je vais l'imprimer, l'étudier et je reviendrai poster ici si je trouve des choses bizarres (qui nécessitent une aide ).

    Cette migration est prévue pour la semaine prochaine .

    merci.


    Citation Envoyé par farscape Voir le message
    salut,
    déjà vc2008 permet la migration du projet (comme vc2005) .
    ensuite tout dépend du code.
    si il utilise beaucoup la stl il peut y avoir quelques problème à la compilation.
    sinon tu peux aussi consulter mon tuto sur le sujet pour les erreurs courantes
    l'autre point épineux c'est l'utilisation ou non de bibliothèques tierces.
    il vaudrait mieux que tout soit reconstruit avec vc2008 .
    sinon je suis en train de migrer des projets qui fonctionnent sous vc6 et vc2005
    je n'ai pas de probléme particulier ,si ce n'est en debug ou j'ai un message l'autre monde qui m'empêche d'exécuter l'application...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Bonjour,

    Je reviens sur ce topic car commence déjà à avoir des misères .

    Bcp de mes modifs sont liées à l'utilisation des std::vector. mais tout ceci se passe bien.
    Quelques fonctions 'deprecated' à modifier, pas trop de problèmes non plus..

    Mais voilà que je tombe sur un truc bizarre..
    j'ai une structure de type SEC_WINNT_AUTH_IDENTITY_W (qui contient donc certains USHORT*) et j'aimerais y placer mes BSTR.

    Avec VS6.0, un simple = suffisait, malheureusement sous vs2008 les choses ont changées..

    Ma question est donc très simple:
    Comment mettre un BSTR dans un USHORT* ??

    Si quelqu'un à la réponse, qu'il n'hésite pas

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Qu'est-ce qui a changé exactement ?
    Je n'ai que Visual 2005, et dans celui-ci il y a toujours des unsigned short * pour les chaînes dans la version unicode de la structure...

    Es-tu sûr que tes BSTR sont bien terminées par un caractère nul ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Qu'est-ce qui a changé exactement ?
    Je n'ai que Visual 2005, et dans celui-ci il y a toujours des unsigned short * pour les chaînes dans la version unicode de la structure...

    Es-tu sûr que tes BSTR sont bien terminées par un caractère nul ?
    Bonjour Médinoc,

    Rien n'a changé en fait, si ce n'est le compilateur..

    Pour construire mon bstr, celà se passe dans un autre composant avec un CString::AllocSysString(); donc j'imagnie que mon bstr est bien formatté.

    Ce code compilait sans problème sous VS6.0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LDAPsecIdent.Domain = bstServerName;
    et voici l'erreur sous VS2008
    " error C2440: '=' : cannot convert from 'BSTR' to 'unsigned short * '"


  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ah, ça y est, j'ai compris: C'est qu'avec les nouvelles versions de Visual, wchar_t n'est plus un typedef sur unsigned short, mais un type à part entière.
    ...Et cette structure-là n'a pas été mise à jour.

    Je te conseille un reinterpret_cast<>, voir mieux, une fonction inline (pour être sûr que le type en entrée est le bon) :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    inline unsigned short * WcharToUshort(wchar_t * pwc)
    {
    	//Cette ligne sert à faire une assertion compile-time:
    	//La compilation échouera si wchar_t cesse d'avoir 
    	//la même taille qu'un unsigned short
    	typedef int assert_sizeof[ (sizeof(wchar_t)==sizeof(unsigned short) ? 1 : -1) ];
     
    	return reinterpret_cast< unsigned short * >(pwc);
    }
     
    inline unsigned short const * WcharToUshort(wchar_t const * pcwc)
    { return reinterpret_cast< unsigned short const * >(pcwc); }
     
    ...
     
    LDAPsecIdent.Domain = WcharToUshort(bstServerName);
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Extraordinaire, ca compile :d

    merci beaucoup.

    suite au prochain épisode..

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    hello,

    La migration se poursuit, pour un total d'à peu près 140 000 lignes de codes réparties sur 40 projets, je n'ai que 4 projets qui vont me demander plus de 5 minutes de recherche..
    C'est quand même assez sympa..

    Je ne vous cache pas qu'il y a une utilisation massive de la directive _CRT_SECURE_NO_WARNINGS qui permet de ne pas afficher de warning pour les fonction deprecated...

    Q: A ce propos y a t il un risque que cette directive soit supprimée dans une éventuelle prochaine mise à jour de vs2008 ? (personne ne voit dans le futur je sais, mais si info..?)

    Sinon, un autre message :
    "WINVER not defined. Defaulting to 0x0600 (Windows Vista)"

    Q: Je ne sais pas ou je peux définir ce fameux WINVER, avez vous une idée?

    Q: Une toute dernière questions concernant les MFC et TR1, est ce que ces mise à jour sont dans la version finale de vs2008 (que j'utilise) où il faudra les telecharger sous forme de package plus tard...?

    Merci

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par squale32 Voir le message
    hello,

    La migration se poursuit, pour un total d'à peu près 140 000 lignes de codes réparties sur 40 projets, je n'ai que 4 projets qui vont me demander plus de 5 minutes de recherche..
    C'est quand même assez sympa..
    Je ne vous cache pas qu'il y a une utilisation massive de la directive _CRT_SECURE_NO_WARNINGS qui permet de ne pas afficher de warning pour les fonction deprecated...
    Q: A ce propos y a t il un risque que cette directive soit supprimée dans une éventuelle prochaine mise à jour de vs2008 ? (personne ne voit dans le futur je sais, mais si info..?)
    pas d'informations dans ce sens...

    Citation Envoyé par squale32 Voir le message
    Sinon, un autre message :
    "WINVER not defined. Defaulting to 0x0600 (Windows Vista)"

    Q: Je ne sais pas ou je peux définir ce fameux WINVER, avez vous une idée?
    rajoute dans stdafx.h targetver.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #pragma once
     
    #ifndef _SECURE_ATL
    #define _SECURE_ATL 1
    #endif
     
    #ifndef VC_EXTRALEAN
    #define VC_EXTRALEAN            // Exclure les en-têtes Windows rarement utilisés
    #endif
     #include "targetver.h"
    son contenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #pragma once
     
    // Les macros suivantes définissent la plateforme minimale requise. La plateforme minimale requise
    // est la version de Windows, Internet Explorer etc. qui dispose des fonctionnalités nécessaires pour exécuter 
    // votre application. Les macros fonctionnent en activant toutes les fonctionnalités disponibles sur les versions de la plateforme jusqu'à la 
    // version spécifiée.
     
    // Modifiez les définitions suivantes si vous devez cibler une plateforme avant celles spécifiées ci-dessous.
    // Reportez-vous à MSDN pour obtenir les dernières informations sur les valeurs correspondantes pour les différentes plateformes.
    #ifndef WINVER                          // Spécifie que la plateforme minimale requise est Windows Vista.
    #define WINVER 0x0600           // Attribuez la valeur appropriée à cet élément pour cibler d'autres versions de Windows.
    #endif
     
    #ifndef _WIN32_WINNT            // Spécifie que la plateforme minimale requise est Windows Vista.
    #define _WIN32_WINNT 0x0600     // Attribuez la valeur appropriée à cet élément pour cibler d'autres versions de Windows.
    #endif
     
    #ifndef _WIN32_WINDOWS          // Spécifie que la plateforme minimale requise est Windows 98.
    #define _WIN32_WINDOWS 0x0410 // Attribuez la valeur appropriée à cet élément pour cibler Windows Me ou version ultérieure.
    #endif
     
    #ifndef _WIN32_IE                       // Spécifie que la plateforme minimale requise est Internet Explorer 7.0.
    #define _WIN32_IE 0x0700        // Attribuez la valeur appropriée à cet élément pour cibler d'autres versions d'Internet Explorer.
    #endif
    Citation Envoyé par squale32 Voir le message
    Q: Une toute dernière questions concernant les MFC et TR1, est ce que ces mise à jour sont dans la version finale de vs2008 (que j'utilise) où il faudra les telecharger sous forme de package plus tard...?

    Merci
    non ,il faut télécharge un pack qui est toujours en beta a ce jour:
    http://blog.developpez.com/index.php...&c=1&tb=1&pb=1

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Bonjour,

    Me voici avec de NouvelleS erreurS :

    1)
    J'ai un projet qui compile sans erreur, mais une fois arrivé au link, j'ai une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1>LINK : fatal error LNK1104: cannot open file 'LIBC.lib'
    Cette erreur arrive en mode release mais pas en mode debug .
    Si je veux ignorer cette librairie en release, j'ai des tonnes d'autres erreurs au link. (elle est ignorée en debug)
    Là je sais vraiment pas quoi faire, les "additional dependencies" en release:

    atlsd.lib licence.lib lm_new.obj lmgr.lib lmapi.lib ws2_32.lib netapi32.lib Comdlg32.lib comctl32.lib nafxcw.lib libcpmt.lib

    maintenant en debug:
    atlsd.lib licence.lib lm_new.obj lmgr.lib lmapi.lib ws2_32.lib netapi32.lib Comdlg32.lib comctl32.lib nafxcw.lib

    une idée ???


    2)
    Dans un autre projet, j'ai droit à ~140 erreurs du même type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    2>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlbase.h(6648) : error C2664: 'ATL::Checked::wcscat_s' : cannot convert parameter 1 from 'TCHAR [128]' to 'wchar_t *'
    2>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    et pourtant, cette fonction wcscat_s, je ne l'utilise nulle part dans le projet..
    Est ce un problème de linker option où y a t il qqchose à faire?


    Merci pour vos aides précieuses


    Francois

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    1. La C Run-Time Library (CRT) mono-thread n'existe plus.
      Tu dois retrouver les bibliothèques qui étaient compilées pour cette CRT, et les recompiler pour la CRT multi-thread statique ou dynamique.
    2. C'est visiblement une fonction d'ATL qui l'utilise.
      Vérifie peut-être les paramètres que tu passes à ladite fonction...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Salut Médinoc,

    Mon premier problème est résolu, je n'ai pas du recompiler de Lib mais juste faire attention à ce que j'ajoutais comme lib, je n'ai finallement gardé que:

    nafxcw.lib licence.lib lm_new.obj lmgr.lib lmapi.lib ws2_32.lib netapi32.lib Comdlg32.lib comctl32.lib

    et ignorer la libc.lib.
    Sans doute qu'il y avait une lib qui ne correspondait pas au multithread static..



    Concernant le deuxième problème, j'ai beaucoup de mal à trouver l'endroit où l'on utilise cette fonction..
    elle s'appelle AtlRegisterClassCategoriesHelper et vient de atlbase.h, je ne la trouve malheureusement nulle part, je ne l'appelle pas explicitement..

    Il ne s'agit apparemment pas d'un mauvais passage de paramètre, le dit paramètre étant défini dans ce meme fichier atlbase.h

    Je ne vois pas où je pourrais vérifier quelque chose...??
    une idée?

  14. #14
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je ne peux pas t'aider, j'ai Visual 2005.

    Peux-tu poster une des lignes incriminées (genre, la 6648) et toute la fonction qui l'entoure ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Je ne peux pas t'aider, j'ai Visual 2005.

    Peux-tu poster une des lignes incriminées (genre, la 6648) et toute la fonction qui l'entoure ?

    voici la dite fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
    ATLINLINE ATLAPI AtlRegisterClassCategoriesHelper( REFCLSID clsid,
       const struct _ATL_CATMAP_ENTRY* pCatMap, BOOL bRegister )
    {
       CComPtr< ICatRegister > pCatRegister;
       HRESULT hResult;
       const struct _ATL_CATMAP_ENTRY* pEntry;
       CATID catid;
     
       if( pCatMap == NULL )
       {
    	  return( S_OK );
       }
     
       if (InlineIsEqualGUID(clsid, GUID_NULL))
       {
    	  ATLASSERT(0 && _T("Use OBJECT_ENTRY_NON_CREATEABLE_EX macro if you want to register class categories for non creatable objects."));
    	  return S_OK;
       }
     
       hResult = CoCreateInstance( CLSID_StdComponentCategoriesMgr, NULL,
    	  CLSCTX_INPROC_SERVER, __uuidof(ICatRegister), (void**)&pCatRegister );
       if( FAILED( hResult ) )
       {
    	  // Since not all systems have the category manager installed, we'll allow
    	  // the registration to succeed even though we didn't register our
    	  // categories.  If you really want to register categories on a system
    	  // without the category manager, you can either manually add the
    	  // appropriate entries to your registry script (.rgs), or you can
    	  // redistribute comcat.dll.
    	  return( S_OK );
       }
     
       hResult = S_OK;
       pEntry = pCatMap;
       while( pEntry->iType != _ATL_CATMAP_ENTRY_END )
       {
    	  catid = *pEntry->pcatid;
    	  if( bRegister )
    	  {
    		 if( pEntry->iType == _ATL_CATMAP_ENTRY_IMPLEMENTED )
    		 {
    			hResult = pCatRegister->RegisterClassImplCategories( clsid, 1,
    			   &catid );
    		 }
    		 else
    		 {
    			ATLASSERT( pEntry->iType == _ATL_CATMAP_ENTRY_REQUIRED );
    			hResult = pCatRegister->RegisterClassReqCategories( clsid, 1,
    			   &catid );
    		 }
    		 if( FAILED( hResult ) )
    		 {
    			return( hResult );
    		 }
    	  }
    	  else
    	  {
    		 if( pEntry->iType == _ATL_CATMAP_ENTRY_IMPLEMENTED )
    		 {
    			pCatRegister->UnRegisterClassImplCategories( clsid, 1, &catid );
    		 }
    		 else
    		 {
    			ATLASSERT( pEntry->iType == _ATL_CATMAP_ENTRY_REQUIRED );
    			pCatRegister->UnRegisterClassReqCategories( clsid, 1, &catid );
    		 }
    	  }
    	  pEntry++;
       }
     
       // When unregistering remove "Implemented Categories" and "Required Categories" subkeys if they are empty.
       if (!bRegister)
       {
    		OLECHAR szGUID[64];
    		::StringFromGUID2(clsid, szGUID, 64);
    		USES_CONVERSION_EX;
    		TCHAR* pszGUID = OLE2T_EX(szGUID, _ATL_SAFE_ALLOCA_DEF_THRESHOLD);
    		if (pszGUID != NULL)
    		{
    			TCHAR szKey[128];
    #ifdef UNICODE
    			Checked::wcscpy_s(szKey, _countof(szKey), _T("CLSID\\"));
    			Checked::wcscat_s(szKey, _countof(szKey), pszGUID);
    			Checked::wcscat_s(szKey, _countof(szKey), _T("\\Required Categories"));
    #else
    			Checked::strcpy_s(szKey, _countof(szKey), _T("CLSID\\"));
    			Checked::strcat_s(szKey, _countof(szKey), pszGUID);
    			Checked::strcat_s(szKey, _countof(szKey), _T("\\Required Categories"));
    #endif
     
    			CRegKey root(HKEY_CLASSES_ROOT);
    			CRegKey key;
    			DWORD cbSubKeys = 0;
     
    			LRESULT lRes = key.Open(root, szKey, KEY_READ);
    			if (lRes == ERROR_SUCCESS)
    			{
    				lRes = RegQueryInfoKey(key, NULL, NULL, NULL, &cbSubKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
    				key.Close();
    				if (lRes == ERROR_SUCCESS && cbSubKeys == 0)
    				{
    					root.DeleteSubKey(szKey);
    				}
    			}
     
    #ifdef UNICODE
    			Checked::wcscpy_s(szKey, _countof(szKey), _T("CLSID\\"));
    			Checked::wcscat_s(szKey, _countof(szKey), pszGUID);
    			Checked::wcscat_s(szKey, _countof(szKey), _T("\\Implemented Categories"));
    #else
    			Checked::strcpy_s(szKey, _countof(szKey), _T("CLSID\\"));
    			Checked::strcat_s(szKey, _countof(szKey), pszGUID);
    			Checked::strcat_s(szKey, _countof(szKey), _T("\\Implemented Categories"));
    #endif
    			lRes = key.Open(root, szKey, KEY_READ);
    			if (lRes == ERROR_SUCCESS)
    			{
    				lRes = RegQueryInfoKey(key, NULL, NULL, NULL, &cbSubKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
    				key.Close();
    				if (lRes == ERROR_SUCCESS && cbSubKeys == 0)
    				{
    					root.DeleteSubKey(szKey);
    				}
    			}
    		}
       }
       return( S_OK );
    }
     
    #endif // _ATL_DLL
    et plus particulièrement une des parties qui pose problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    TCHAR szKey[128];
    #ifdef UNICODE
    			Checked::wcscpy_s(szKey, _countof(szKey), _T("CLSID\\"));
    			Checked::wcscat_s(szKey, _countof(szKey), pszGUID);
    			Checked::wcscat_s(szKey, _countof(szKey), _T("\\Required Categories"));
    #else
    			Checked::strcpy_s(szKey, _countof(szKey), _T("CLSID\\"));
    			Checked::strcat_s(szKey, _countof(szKey), pszGUID);
    			Checked::strcat_s(szKey, _countof(szKey), _T("\\Required Categories"));
    #endif
    A savoir: C'est le fameux TCHAR qui semble poser problème ...
    Vu qu'il a une définition différente selon que l'on est ou non en Unicode, j'ai tenté la modif dans les options du projet mais comme je m'y attendais, j'ai bcp bcp bcp plus d'erreurs et fatalement sur des fichiers m'appartenant..


    EDIT: Unicode est défini dans un des fichiers du project
    Je fais qqes tests pour savoir si je peux retirer le define sans problèmes ou pas...

    EDIT²:
    Je peux commenter le #define Unicode et je retombe au misérable chiffre de 9 erreurs ^^.
    Cependant, Mon projet communique avec un serveur DCOM à l'aide de BSTR et utilise de temps en temps de l'unicode...

    J'ai donc deux idées, la première serait de pouvoir convertir les wide en single chaque fois que j'ai un échange, si bien sur c'est possible?

    l'autre idée serait de faire un #undef unicode là où j'appelle la fameuse fonction..

    Qu'en penses tu?

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    C'est corrigé ^^.

    J'ai choisi ma première idée, maintenant ca compile, on verra pour la phase de test la semaine prochaine .


    Plus que 3 projets à problèmes, ca va allez

  17. #17
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    J'ignore exactement comment tu as corrigé, mais le problème venait apparemment du fait qu'il y ait une incohérence entre UNICODE et _UNICODE : Les deux doivent être définies, ou aucune, mais pas l'une seulement.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    J'ignore exactement comment tu as corrigé, mais le problème venait apparemment du fait qu'il y ait une incohérence entre UNICODE et _UNICODE : Les deux doivent être définies, ou aucune, mais pas l'une seulement.
    Merci pour l'info, mais _UNICODE était défini au même endroit que mon UNICODE.

    Quoi qu'il en soit, le tag UNICODE n'était là que pour me permettre d'appelé la fonction ConvertStringSecurityDescriptorToSecurityDescriptor avec de l'unicode (car mon descripteur vient d'un autre projet via un BSTR..).

    J'ai donc retiré le #define UNICODE, ce qui a permit d'éradiquer les erreurs au niveau d'ATLBASE.h, et ensuite, j'ai spécifié explicitement que je voulais la version unicode de la fonction susmentionnée, c'est à dire:
    ConvertStringSecurityDescriptorToSecurityDescriptorW.

  19. #19
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Au fait: Normalement, tu peux retirer tous les #define UNICODE et #define _UNICODE, car ceux-ci sont intégralement et cohéremment ajoutés dans tout le projet par une option du projet.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Bonjour,

    Il n'y a plus qu'un endroit où je bloque, mais c'est peut être un gros morceau.. je m'explique:

    Une partie du programme est un port monitor, pour le compiler, nous utilisons le Development driver kit (NT DDK) en version windows 2000. Ce port monitor doit inclure toutes les définitions d'autres projets ( des headers..). Ces headers étant compilé avec MIDL version 5.0 (car il s'agit de fichier IDL à la base), je n'y ai pas accès.

    Mon problème vient du fait qu'une nouvelle version du compilateur IDL vient avec vs 2008, il s'agit de la version 7.00. Dans cette version, il y a certain mot clés qui apparaissent et le build du NT DDK ne connait pas les nouveaux mot clés, dans mon cas, il s'agit de:
    __RPC__deref_out


    Avez vous une idée de comment je pourrais régler le problème?

    J'imagine qu'une solution serait de mettre le DDK à jour avec une version plus récente (il s'agirait donc d'un des dernier WDF - windows driver foundation - étant donné que les DDK n'existent plus en tant que tel?).
    Cette manipulation me semble assez lourde et je me demande s'il n'y aurait pas un moyen plus simple?

    Merci


    PS: ce mot clé est en fait une "SAL Annotations" qui permet des vérifications [...]
    Désactiver ces annotations serait il une bonne idée et/ou une solution possible?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. migration VC6.0 VC2008 problème msxml
    Par Milirf dans le forum Visual C++
    Réponses: 4
    Dernier message: 04/08/2009, 15h06
  2. Réponses: 3
    Dernier message: 20/02/2009, 17h26
  3. Réponses: 6
    Dernier message: 19/02/2009, 15h26
  4. Réponses: 4
    Dernier message: 16/02/2009, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo