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

MFC Discussion :

[.NET]Déclaration de tableaux et initialization de pointeurs


Sujet :

MFC

  1. #1
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut [.NET]Déclaration de tableaux et initialization de pointeurs
    Bonjour,

    on m'a demandé récemment de faire une petite application de tests sous Visual Studio.NET 2003 en C++. Jusqu'à présent je n'y travaillais qu'en C# (et sous Borland c++ Builder ou gcc en C++).

    Donc j'ai créé une nouvelle solution "Projets Visual C++" => "Application Windows Form (.NET)".

    Dans cette application, je veux juste faire quelques traitements sur des buffers (membres de la classe Form1) en utilisant des pointeurs (déclarés en local dans mes méthodes) pour naviguer dans ces buffers.

    Dès le début, j'ai butté sur la déclaration dans la classe de mes buffers. J'ai contourné le problème en les déclarant dans mes méthodes : c'est pas propre mais c'était pas important dans l'instant.

    Oui mais voilà, les traitements dans mes méthodes se complexifiant, le nombre de buffers augmente et j'ai donc une jolie exception StackOverFlow à l'exécution.

    Donc je déclare le buffer dans la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char buffer __nogc[256];
    Mais ensuite je ne parviens pas, dans ma méthode, à initialiser un pointeur sur ce buffer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned char * ptrBuffer = &buffer[0];
    =>error C2440: 'initialisation' : impossible de convertir de 'unsigned char __gc *' en 'unsigned char *'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned char * ptrBuffer = (unsigned char * )&buffer[0];
    =>error C2440: 'cast de type' : impossible de convertir de 'unsigned char __gc *' en 'unsigned char *'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned char __nogc * ptrBuffer = (unsigned char __nogc *)buffer;
    =>error C2440: 'cast de type' : impossible de convertir de 'unsigned char [256]' en 'unsigned char *'
    ...

    Bref, après de nombreuses combinaisons (c'est triste d'essayer de résoudre un problème de compilation de cette façon) , je ne parviens pas à trouver l'utilisation correcte. Je sais que mon problème est lié à l'utilisation des extensions managées (l'option de compilation /clr) mais j'arrive pas à exploiter l'info.

    Donc avis aux experts (dont je ne fais hélas pas parti).

    Merci.

    Flo.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Pourquoi utiliser __nogc ?

    (Pourquoi ne pas utiliser le C++/CLI avec vs2005 ? )

  3. #3
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Je n'ai pas accès à Visual Studio 2005.

    Et j'utilise __nogc, parce que si je mets rien j'ai droit à une erreur de compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned char buffer [256];
    => error C2697: 'buffer' : doit spécifier explicitement __gc ou __nogc pour un tableau déclaré dans un type managé
    avec __gc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned char buffer __gc[256];
    => error C3616: '256' : une taille ne peut pas être spécifiée dans une déclaration de tableau __gc
    Peut-être (et surement) je devrais faire autrement.

    Flo.

    PS : je précise que je ne veux pas utiliser de tableaux de taille dynamique.

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Pourquoi tu ne travailles pas avec des String plutot ?

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Bon sinon, je vais quand meme répondre à ta question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char __pin * ptrBuffer = buffer;
    Un truc du genre devrait marcher, mais bon, tant qu'à faire ... utilise les String managées, c'est fait pour pas s'embeter

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    DSL, j'ai peu de souvenir de vs2003 mais je vai essayer

    unsigned char => Byte ou BYTE

    ensuite pour initialiser un pointeur utilise le mot cle __gc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Byte* MyArray = __gc new Byte[256];

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    PS : je précise que je ne veux pas utiliser de tableaux de taille dynamique.
    pas de taille dynamique ? ce qui exclu les string ... enfin je pense O_o

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 74
    Points : 96
    Points
    96
    Par défaut
    en .Net le "unsigned char" n'existe plus,
    il te faut utiliser des byte et pour instancier le tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    byte[] buffer =null;
    buffer = new byte[256];
    ou pour des char:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char[] buffer =null;
    buffer = new char[256];
    Le mieux reste les string ou le stringBuilder

  9. #9
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Merci beaucoup.

    "__pin" a tout résolu.

    Quand aux tableaux d'unsigned char, c'est pour y mettre des images .

    Je vois enfin la vie en rose.

    Merci.

    A+

    Flo.

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

Discussions similaires

  1. [VB.Net]Déclaration et initialisation d'une variable
    Par DonF dans le forum Windows Forms
    Réponses: 6
    Dernier message: 14/11/2006, 20h05
  2. [VB.NET] Créer plusieurs tableaux dans word
    Par Dj Thunder dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/06/2006, 00h04
  3. [VB.Net] Que choisir tableaux ou collections ?
    Par Pasiphae dans le forum VB.NET
    Réponses: 2
    Dernier message: 16/03/2006, 15h35
  4. Réponses: 9
    Dernier message: 09/11/2005, 11h53
  5. Réponses: 4
    Dernier message: 28/10/2005, 13h32

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