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

C++/CLI Discussion :

erreur incomprehensible


Sujet :

C++/CLI

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut erreur incomprehensible
    bonjour a tous forumer, je viens a vous apres de longues recherches sur le web en vain.
    Je vous explique le probleme : je desire realiser une application de retouche d'images élémentaires avec une interface graphique en visual studio et une dll en c++. La partie visual no problem par contre en c++ j'ai choisi d'utiliser du code managé (apparement plus simple...)

    J'arrive a creer mon image depuis vb en utilisant ma dll jarrive a appeler mes methodes c++ depuis vb MAIS je n'arrive pas a modifier l'image en c++ car il me sort une erreur enorme du style : memoire protégée en acces.

    Je m'explique :
    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
     
    //class pixel
    public class pixel
    {
    public:
    	int r;
    	int g;
    	int b;
     
    	pixel(void);
    	pixel(int,int,int);
    	void affichage();
     
    };
     
    //class monimage
    public ref class monimage
    {
    private:
    	pixel*** matrice;
    	int x;
    	int y;
    	int nbcouleurs;
    	int type;
    public:
    	monimage(void);
    	monimage(System::String^);
    	~monimage(void);
    	void affichage();
    };
    le probleme vient de l'acces a matrice dans la fonction affichage qui est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void monimage::affichage(){
    for (int i=0;i<x;i++){
    		cout<<endl;
    		for (int j=0;j<y;j++){
    			matrice[i][j]->affichage();
     
    		}
    	}
    }
    void pixel::affichage(){
    	cout<<this->r<<" "<<this->g<<" "<<this->b<<" ";
    }
    je peux faire cet affichage si je cree une matrice dans un bloc et que jappel dans ce meme bloc la fonction affichage()
    Mais des que j'appel la fonction affichage() avec une image cree en dehors du meme bloc.
    PAF
    dans pixel::affichage il me dit que this->r ou g ou b est protégé...
    Hors grace au debuger vb j'arrive a voir letat de la matrice juste avant lappel et elle est bien construite c est juste que il ne veut pas acceder a ses attributs...
    et je construit la matrice comme ceci :
    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
     
    char* p=(char*)malloc(sizeof(char)*3);
    	i=0;
    	j=0;
    	int* val=(int*)malloc(sizeof(int)*3);
    	matrice=new pixel**[x];
    	if(type==6){
    		for(int dx=0;dx<x;dx++){
    			matrice[dx] = new pixel*[y];
    			for(int dy=0;dy<y;dy++){
     
    				while(monstream.eof()!=true){
    					val[i]=monstream.get();
    					if(i==2){
    						//cout<<val[0]<<" "<<val[1]<<" "<<val[2]<<" ";
    						matrice[dx][dy]=new pixel(val[0],val[1],val[2]);
    						//matrice[dx][dy]->affichage();
    						i=0;
    					}
    					i++;
    				}
    			}
    		}
    	}
    quelqu'un aurait une idee??
    merci beaucoup!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je n'ai pas tout regardé en détail, mais il y a des choses que je ne comprend pas.
    Votre tableau "matrice" est-il à 2 ou 3 dimensions?
    En fait vous le déclarez à 3 dimensions et l'utilisez à 2 dimensions. D'ailleurs, une image est à 2 dimensions.
    Vous faites une classe "pixel", pourquoi pas, mais je n'ai pas vu où étaient développés les 2 constructeurs de cette classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void pixel::affichage(){
    	cout<<this->r<<" "<<this->g<<" "<<this->b<<" ";
    }
    Pourquoi n'écrivez-vous pas tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void pixel::affichage(){
    	cout<<r<<" "<<g<<" "<<b<<" ";
    }
    Et c'est pas tout

  3. #3
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    Votre tableau "matrice" est-il à 2 ou 3 dimensions?
    C'est un tableau à 2 dimensions de pointeurs sur des « pixel ».
    Par contre, le troisième niveau de pointeurs ne me paraît pas indispensable…

    Citation Envoyé par Pierre Dolez Voir le message
    Vous faites une classe "pixel", pourquoi pas, mais je n'ai pas vu où étaient développés les 2 constructeurs de cette classe
    Sans doute ne sont-ils pas indispensables pour comprendre le problème…
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pixel::pixel(void) : r(), g(), b()
    {}
     
    pixel::pixel(int r, int g, int b) : r(r), g(g), b(b)
    {}
    Citation Envoyé par Pierre Dolez Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void pixel::affichage(){
    	cout<<this->r<<" "<<this->g<<" "<<this->b<<" ";
    }
    Pourquoi n'écrivez-vous pas tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void pixel::affichage(){
    	cout<<r<<" "<<g<<" "<<b<<" ";
    }
    Et pourquoi pas ?
    L'utilisation explicite du pointeur « this » n'est certes pas (toujours) obligatoire, mais elle permet de repérer visuellement et rapidement que l'on travaille avec des données ou des fonctions membres.
    Ça peut être pratique lorsque l'on travaille à plusieurs, sur un gros projet, ou que l'on reprend un ancien code…

  4. #4
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Question:
    Les « public class … » et « public ref class … », c'est une syntaxe particulière à visual studio/vb ?
    Quelle est sa sémantique ?
    Pareil pour « System::String^ » (l'accent circonflexe à la fin du type).

    @raph.g Pas sûr que ce soit une bonne idée de mélanger les « malloc » et les « new »…
    C'est du C++, que diable !
    Vive le « new » !

    Sinon, désolé mais je ne vois pas d'où vient le problème.

  5. #5
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par Steph_ng8 Voir le message
    Question:
    Les « public class … » et « public ref class … », c'est une syntaxe particulière à visual studio/vb ?
    C'est du C++/CLI, un langage d'interop managé / non managé.

    Pour en revenir à la question initiale : c'est un peu dommage d'utiliser le framework .Net et de ne pas l'utiliser... La namespace System.Drawing, contient plein de classe de gestion d'images (Image, Bitmap, ...) Que tu as intérêt à utiliser plutôt que tout te recarrer à la main. Et à moins d'une contrainte particulière (utilisation d'un lib C++ existante par exemple), mieux vaut éviter l'interop...
    ಠ_ಠ

  6. #6
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Ok, merci Guulh.

Discussions similaires

  1. [VB.Net] erreur incomprehensible
    Par eown dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/05/2007, 02h03
  2. [XSLT] erreur incompréhensible
    Par gojira dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 19/06/2006, 11h19
  3. [Fortran 77] Message d'erreur incompréhensible
    Par userB dans le forum Fortran
    Réponses: 2
    Dernier message: 09/06/2006, 10h43
  4. [vb.net][exception] erreur incomprehensible
    Par arnolem dans le forum Windows Forms
    Réponses: 8
    Dernier message: 05/01/2006, 14h33
  5. [langage] Erreur incomprehensible!!!!!
    Par sali dans le forum Langage
    Réponses: 4
    Dernier message: 08/05/2004, 20h58

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