Visual c++, fonction save

Résolu
williamcplusplus Messages postés 20 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 16 juin 2009 - 19 juin 2008 à 14:45
williamcplusplus Messages postés 20 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 16 juin 2009 - 4 juil. 2008 à 13:14
bjr tt le monde!


je developpe une interface d'acquisition d'image avec visual studio c++, masi j'ai du mal enregistrer mes images. l'idée est d'enregistrer un certain nombre d'image (imnumber), leur donner un nom (imname); il faut noter que le nom comprend un numéro (imnumero) incrémenter automatiquement.
j'utilise la fonction save (windows forms) pour faire l'enregistrement.
mon code est:
int imnumero=12;



int



imnumber=15;


char



name[80];


char



nom[80]=

"image"
;


int



*pnumber=&imnumber;


int



*pimnumero=&imnumero;



int



counter=0;


for
(;counter<*pnumber;)

{


for
(

int
i = 0; i< 80;i++) {

name[i] = 0;


//sprintf_s(name,"image%03d.bmp", imnumero);




sprintf_s(name,




"%s.%d.bmp"
, nom, imnumero);}

counter++;

dialog_expert::pictureBox1->Image->Save(


"c:\\name"
);*pimnumero+=1;

}

}

Dès que je compile ça m'affiche un message du genre:




dialog_expert.obj : error LNK2022: échec de l'opération sur les métadonnées (80131187) : Déclarations de méthodes incohérentes dans des types dupliqués
dialog_expert.obj : error LNK2022: échec de l'opération sur les métadonnées (80131187) : Déclarations de méthodes incohérentes dans des types dupliqués


dialog_expert.obj : error LNK2022: échec de l'opération sur les métadonnées (801311D6) : Nombre différent de méthodes dans des types dupliqués
dialog_expert.obj : error LNK2022: échec de l'opération sur les métadonnées (80131188) : Déclarations de champs incohérentes dans des types dupliqués
dialog_expert.obj : error LNK2022: échec de l'opération sur les métadonnées (80131188) : Déclarations de champs incohérentes dans des types dupliqués
dialog_expert.obj : error LNK2022: échec de l'opération sur les métadonnées (801311D7) : Nombre différent de champs dans des types dupliqués
Image_visible.obj : error LNK2022: échec de l'opération sur les métadonnées (80131187) : Déclarations de méthodes incohérentes dans des types dupliqués
Image_visible.obj : error LNK2022: échec de l'opération sur les métadonnées (80131187) : Déclarations de méthodes incohérentes dans des types dupliqués
Image_visible.obj : error LNK2022: échec de l'opération sur les métadonnées (801311D6) : Nombre différent de méthodes dans des types dupliqués
Image_visible.obj : error LNK2022: échec de l'opération sur les métadonnées (80131188) : Déclarations de champs incohérentes dans des types dupliqués
Image_visible.obj : error LNK2022: échec de l'opération sur les métadonnées (80131188) : Déclarations de champs incohérentes dans des types dupliqués (types : Ekta.dialog_expert ; champs : button8) : (0x04000019).


Image_visible.obj : error LNK2022: échec de l'opération sur les métadonnées (801311D7) : Nombre différent de champs dans des types dupliqués






Merci pr vos conseils

williamc++

30 réponses

williamcplusplus Messages postés 20 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 16 juin 2009
25 juin 2008 à 12:51
ok, je vais essayer ça merci.

williamc++
0
williamcplusplus Messages postés 20 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 16 juin 2009
30 juin 2008 à 10:52
williamc++
0
williamcplusplus Messages postés 20 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 16 juin 2009
30 juin 2008 à 11:18
Salut buno!
encore un ti conseil à te demander.Mon interface fonctionne mais le programme crache assez fréquemment. je pense que c'est un problème de gestion des exceptions. Par exemple quand je clique sur la fonction save (pour enregistrer les images à partir de picturebox), et si je n'ai donné au programme le nombre d'image à enregistrer, le numéro à partir duquel se fera l'incrémentation, le programme affiche un message d'erreur (ce qui est normal d'ailleurs) du genre exception non gérée. Pour gérer cette exception, je voudrais afficher un messagebox par exemple qui rappelle à l'utilisateur de vérifier que tous les paramètres ont été correctement définis.
Merci pour tes conseils
______________________________________________________________
private

: System::Void button9_Click(System::Object^ sender, System::EventArgs^ e){
int

imnumero=Convert::ToInt32(textBox5->Text);

int

imnumber=Convert::ToInt32(textBox1->Text);
char

name[80];
char

nom[80]=
"c:\\IMAGECA\\image";
for

(
int counter=0; counter"%s%d.png" , nom, imnumero);

this->pictureBox1->Image->Save(
gcnew String(name));imnumero++;

}

}

williamc++
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
30 juin 2008 à 11:37
Hello,
Là dessus, pas de mystère, ni de magie: dans ta fonction Save(), tu dois vérifier que tes paramètres soient valides. Si ce n'est pas le cas, tu peux, par exemple, retourner un code d'erreur, le récupérer dans la fonction appelante et afficher un message d'erreurs explicatif

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
williamcplusplus Messages postés 20 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 16 juin 2009
1 juil. 2008 à 12:35
slt buno! t'aurais pas un exemple?
williamc++
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
1 juil. 2008 à 14:03
Hum..difficile de donner un exemple là-dessus, ne connaissant pas le corps de la fonction Save().
Mais, en gros:
bool Image::Save(string strName)
{
   // Vérification de la validité du nom
   if (strName.Empty())
      return false;

   // Vérification de l'ouverture du fichier
   FILE * file=fopen(strName.data());
   if (!file)
      return false;

   /* Le reste de ton code */
  
   // tout est ok
   return true;
}

Et à l'appel:

if (false==this->pictureBox1->Image->Save(
gcnew String(name))

   MessageBox...

Tu vois le truc?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
williamcplusplus Messages postés 20 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 16 juin 2009
1 juil. 2008 à 15:02
Merci pour ton conseil, mais je procède comme tu proposes regardes ce que ça donne:
int

imnumero=Convert::ToInt32(textBox5->Text);

int

imnumber=Convert::ToInt32(textBox1->Text);
int

intervaltemps=Convert::ToInt32(textBox3->Text);
char

name[80];
char

nom[80]=
"c:\\IMAGEO\\image"; 

for

(
int counter=0; counter"%s%d.png" , nom, imnumero);
bool

Image::Save(
String strName){

// Vérification de la validité du nom

if (strName.Empty())

return
false;

// Vérification de l'ouverture du fichierFILE * file=fopen(strName.data());

if (!file)

return
false;

/* Le reste de ton code */

// tout est ok

return
true;}

this

->timer1->Interval =intervaltemps;
this

->pictureBox1->Image->Save(
gcnew String(name));imnumero++;

}

if

(
false==
this->pictureBox1->Image->Save(
gcnew String(name));{

this->MessageBox::Show(
"vérifier vos valeurs s'il vous plait",
"valuer incorrecte",MessageBoxButtons::OK,MessageBoxIcon::Error);}

les erreurs associées:
error C2958: l'élément parenthèse '(' gauche de 'c:\documents and settings\babo\bureau\mardi01\jeudi19\send_ekta_nicola_080425ebabo\dialog_expert.h(1027)' n'a pas été équilibré correctement

error C2512: 'System::String::String' : aucun constructeur par défaut approprié disponible

 error C2146: erreur de syntaxe : absence de ')' avant l'identificateur 'strName'

error C2761: 'Save' : redéclaration de la fonction membre non autorisée

 error C2059: erreur de syntaxe : ')'

error C2143: erreur de syntaxe : absence de ';' avant '{'

 error C2065: 'strName' : identificateur non déclaré

 error C2228: la partie gauche de '.Empty' doit avoir un class/struct/union

le type est ''unknown-type'

williamc++
0
williamcplusplus Messages postés 20 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 16 juin 2009
1 juil. 2008 à 15:27
Slt!
mon idée était de faire quelque chose qui ressemble à ça
int

imnumero=Convert::ToInt32(textBox5->Text);

int

imnumber=Convert::ToInt32(textBox1->Text);
int

intervaltemps=Convert::ToInt32(textBox3->Text);
char

name[80];
char

nom[80]=
"c:\\IMBABO\\image";
if

(imnumero>1&&imnumber>1){

for

(
int counter=0; counter"%s%d.png" , nom, imnumero);

this->timer1->Interval =intervaltemps;

this->pictureBox1->Image->Save(
gcnew String(name));imnumero++;

}

}

else

MessageBox::Show(
"vérifier vos valeurs s'il vous plaît",
"valeur non autorisée", MessageBoxButtons::OK,MessageBoxIcon::Error);}
Mais ça n'est valable que si on de valeurs de  imnumero imnumber inférieures à 1 mais pas pour le reste.

williamc++
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
1 juil. 2008 à 15:36
Ah bah oui, j'ai oublié de préciser: il ne fallait pas coller le code tel quel... ce n'est qu'un exemple de tests généralement effectués.
Il te faut un peu de réflexion pour savoir qu'est ce qui peut faire planter ton prog et comment faire pour le détecter...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
williamcplusplus Messages postés 20 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 16 juin 2009
4 juil. 2008 à 13:14
williamc++
0
Rejoignez-nous