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 :

Comportement du compilateur VisualStudio incomprehenible


Sujet :

Visual C++

  1. #1
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut Comportement du compilateur VisualStudio incomprehenible
    bonjour
    je repends en ce moment un projet qui était fait en C++ Builder pour le migrer sous Visual Studio 10.
    Je butte actuellement sur des comportements du compilateur que je ne comprends pas. J'ai mis en commentaire les sources d'information utilisées pour le codage. Elle concerne la séquence de code ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
              System::String^ VirtualPath;
    	  array<wchar_t>^ VirtualBuffer;
    	  size_t len;
    	  len = wcslen( (wchar_t*)wsDatabaseName.c_str());
    	  VirtualPath = gcnew System::String;
    	  VirtualBuffer = gcnew array<wchar_t, (int) 1>;
    	  // le prototype décit dans msdn library: public: static void Copy( IntPtr source,  array<wchar_t>^ destination, int startIndex, int length);
    	  // la description de la fonction dans msdn library: Copie des données d'un pointeur mémoire non managé dans un tableau de caractères managé.
    	  // suggestion du compilateur Marshal::Copy(cli::array<Type,dimension> ^,int,System::IntPtr,int) 
    	  Marshal::Copy( VirtualBuffer, (Int32)0, (System::IntPtr)wsDatabaseName.c_str(), (Int32)len);
    	  VirtualPath = (System::String^)VirtualBuffer;
    les erreurs portent sur les instructions gcnew et sur le Copy
    ci après les messages d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManager.cpp(355): error C2512: 'System::String::String'*: aucun constructeur par défaut approprié disponible
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManager.cpp(356): error C2748: La création de tableau managé doit posséder une taille de tableau ou un initialiseur de tableau
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManager.cpp(360): error C2440: 'cast de type'*: impossible de convertir de 'const wchar_t *' en 'System::IntPtr'
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManager.cpp(361): error C2440: 'cast de type'*: impossible de convertir de 'cli::array<Type> ^' en 'System::String ^'
    1>          with
    1>          [
    1>              Type=wchar_t
    1>          ]
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManager.cpp(475): error C2059: erreur de syntaxe*: ';'
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManager.cpp(516): warning C4244: 'argument'*: conversion de 'long' en 'short', perte possible de données
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManager.cpp(534): warning C4244: 'argument'*: conversion de 'long' en 'short', perte possible de données
    1>
    La première est répétitive si je fais un gcnew avec comme type la String il me met systématiquement qu'il ne connait pas la System::String::String
    le deuxième est une interprétation de l'aide de Microsoft http://msdn.microsoft.com/fr-fr/library/ms146632 il me dit que l'array doit donner un type avec sa taille, selon les compilation il ajoute que la taille est comprise entre 1 et 32
    le troisième message met en cause la syntaxe de la Copy qui est défini dans http://msdn.microsoft.com/fr-fr/library/ms146637
    qui peut me donner les syntaxes acceptées par le compilateur

  2. #2
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut La solution
    elle est simple.elle est donné par ce lien http://msdn.microsoft.com/fr-fr/library/ms235219.aspx et s'écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
              System::String^ VirtualPath;
    	  VirtualPath = gcnew String(wsDatabaseName.c_str());
    	  if( File::Exists( VirtualPath) == true)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comportement de makefile différent selon le compilateur choisi !
    Par nonobus dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 04/06/2014, 11h46
  2. Comportement étrange de VisualStudio
    Par ram-0000 dans le forum Visual C++
    Réponses: 1
    Dernier message: 11/01/2011, 13h31
  3. Comportement du compilateur mode optimisé
    Par reptils dans le forum C++
    Réponses: 7
    Dernier message: 04/02/2009, 11h03
  4. sprintf (comportement bizarre selon le compilateur)
    Par turbo_chess dans le forum C
    Réponses: 6
    Dernier message: 11/10/2007, 15h24
  5. [VC++ vs gcc]Comportement compilateur et références croisée
    Par vdemeester dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 31/07/2007, 13h33

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