Bonjour,
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme suit :
on fournit une fonction "my_error_exit()", qui doit se démerder pour
arrêter le code. (La fonction par défaut appelle exit().)
Dans cette fonction, je vois deux choix possibles :
1- longjmp() (avec un setjmp() dans le code appelant)
2- throw une_exception;
Au moins sur mon compilateur (VC++ 2008), la première solution est
officiellement non gérée :
"Do not use setjmp and longjmp in C++ programs; these functions do not
support C++ object semantics."
<http://msdn.microsoft.com/en-us/library/yz2ez4as(VS.80).aspx>
Lancer une exception serait bien agréable, mais j'ai cru lire qu'il ne
fallait pas laisser se propager une exception à travers du code C.
Pour l'instant, j'ai pondu une interface en C qui contient un paquet
de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
{
if (setjmp (error_manager.setjmp_buffer))
{
return 0;
}
jpeg_start_decompress (cinfo);
return 1;
}
Si quelqu'un a une meilleure solution...
Bonjour,
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme suit :
on fournit une fonction "my_error_exit()", qui doit se démerder pour
arrêter le code. (La fonction par défaut appelle exit().)
Dans cette fonction, je vois deux choix possibles :
1- longjmp() (avec un setjmp() dans le code appelant)
2- throw une_exception;
Au moins sur mon compilateur (VC++ 2008), la première solution est
officiellement non gérée :
"Do not use setjmp and longjmp in C++ programs; these functions do not
support C++ object semantics."
<http://msdn.microsoft.com/en-us/library/yz2ez4as(VS.80).aspx>
Lancer une exception serait bien agréable, mais j'ai cru lire qu'il ne
fallait pas laisser se propager une exception à travers du code C.
Pour l'instant, j'ai pondu une interface en C qui contient un paquet
de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
{
if (setjmp (error_manager.setjmp_buffer))
{
return 0;
}
jpeg_start_decompress (cinfo);
return 1;
}
Si quelqu'un a une meilleure solution...
Bonjour,
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme suit :
on fournit une fonction "my_error_exit()", qui doit se démerder pour
arrêter le code. (La fonction par défaut appelle exit().)
Dans cette fonction, je vois deux choix possibles :
1- longjmp() (avec un setjmp() dans le code appelant)
2- throw une_exception;
Au moins sur mon compilateur (VC++ 2008), la première solution est
officiellement non gérée :
"Do not use setjmp and longjmp in C++ programs; these functions do not
support C++ object semantics."
<http://msdn.microsoft.com/en-us/library/yz2ez4as(VS.80).aspx>
Lancer une exception serait bien agréable, mais j'ai cru lire qu'il ne
fallait pas laisser se propager une exception à travers du code C.
Pour l'instant, j'ai pondu une interface en C qui contient un paquet
de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
{
if (setjmp (error_manager.setjmp_buffer))
{
return 0;
}
jpeg_start_decompress (cinfo);
return 1;
}
Si quelqu'un a une meilleure solution...
Fabien LE LEZ writes:Bonjour,
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme suit :
on fournit une fonction "my_error_exit()", qui doit se démerder pour
arrêter le code. (La fonction par défaut appelle exit().)
Dans cette fonction, je vois deux choix possibles :
1- longjmp() (avec un setjmp() dans le code appelant)
2- throw une_exception;
Au moins sur mon compilateur (VC++ 2008), la première solution est
officiellement non gérée :
"Do not use setjmp and longjmp in C++ programs; these functions do not
support C++ object semantics."
<http://msdn.microsoft.com/en-us/library/yz2ez4as(VS.80).aspx>
Lancer une exception serait bien agréable, mais j'ai cru lire qu'il ne
fallait pas laisser se propager une exception à travers du code C.
Pour l'instant, j'ai pondu une interface en C qui contient un paquet
de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
{
if (setjmp (error_manager.setjmp_buffer))
{
return 0;
}
jpeg_start_decompress (cinfo);
return 1;
}
Si quelqu'un a une meilleure solution...
Compiler la bibliothèque avec un compilateur C++ et utiliser les
exceptions.
Fabien LE LEZ <gramster@gramster.com> writes:
Bonjour,
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme suit :
on fournit une fonction "my_error_exit()", qui doit se démerder pour
arrêter le code. (La fonction par défaut appelle exit().)
Dans cette fonction, je vois deux choix possibles :
1- longjmp() (avec un setjmp() dans le code appelant)
2- throw une_exception;
Au moins sur mon compilateur (VC++ 2008), la première solution est
officiellement non gérée :
"Do not use setjmp and longjmp in C++ programs; these functions do not
support C++ object semantics."
<http://msdn.microsoft.com/en-us/library/yz2ez4as(VS.80).aspx>
Lancer une exception serait bien agréable, mais j'ai cru lire qu'il ne
fallait pas laisser se propager une exception à travers du code C.
Pour l'instant, j'ai pondu une interface en C qui contient un paquet
de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
{
if (setjmp (error_manager.setjmp_buffer))
{
return 0;
}
jpeg_start_decompress (cinfo);
return 1;
}
Si quelqu'un a une meilleure solution...
Compiler la bibliothèque avec un compilateur C++ et utiliser les
exceptions.
Fabien LE LEZ writes:Bonjour,
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme suit :
on fournit une fonction "my_error_exit()", qui doit se démerder pour
arrêter le code. (La fonction par défaut appelle exit().)
Dans cette fonction, je vois deux choix possibles :
1- longjmp() (avec un setjmp() dans le code appelant)
2- throw une_exception;
Au moins sur mon compilateur (VC++ 2008), la première solution est
officiellement non gérée :
"Do not use setjmp and longjmp in C++ programs; these functions do not
support C++ object semantics."
<http://msdn.microsoft.com/en-us/library/yz2ez4as(VS.80).aspx>
Lancer une exception serait bien agréable, mais j'ai cru lire qu'il ne
fallait pas laisser se propager une exception à travers du code C.
Pour l'instant, j'ai pondu une interface en C qui contient un paquet
de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
{
if (setjmp (error_manager.setjmp_buffer))
{
return 0;
}
jpeg_start_decompress (cinfo);
return 1;
}
Si quelqu'un a une meilleure solution...
Compiler la bibliothèque avec un compilateur C++ et utiliser les
exceptions.
Bonjour,
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme suit :
on fournit une fonction "my_error_exit()", qui doit se démerder pour
arrêter le code. (La fonction par défaut appelle exit().)
Dans cette fonction, je vois deux choix possibles :
1- longjmp() (avec un setjmp() dans le code appelant)
2- throw une_exception;
Au moins sur mon compilateur (VC++ 2008), la première solution est
officiellement non gérée :
"Do not use setjmp and longjmp in C++ programs; these functions do not
support C++ object semantics."
<http://msdn.microsoft.com/en-us/library/yz2ez4as(VS.80).aspx>
Lancer une exception serait bien agréable, mais j'ai cru lire qu'il ne
fallait pas laisser se propager une exception à travers du code C.
Pour l'instant, j'ai pondu une interface en C qui contient un paquet
de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
{
if (setjmp (error_manager.setjmp_buffer))
{
return 0;
}
jpeg_start_decompress (cinfo);
return 1;
}
Si quelqu'un a une meilleure solution...
Merci d'avance.
Bonjour,
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme suit :
on fournit une fonction "my_error_exit()", qui doit se démerder pour
arrêter le code. (La fonction par défaut appelle exit().)
Dans cette fonction, je vois deux choix possibles :
1- longjmp() (avec un setjmp() dans le code appelant)
2- throw une_exception;
Au moins sur mon compilateur (VC++ 2008), la première solution est
officiellement non gérée :
"Do not use setjmp and longjmp in C++ programs; these functions do not
support C++ object semantics."
<http://msdn.microsoft.com/en-us/library/yz2ez4as(VS.80).aspx>
Lancer une exception serait bien agréable, mais j'ai cru lire qu'il ne
fallait pas laisser se propager une exception à travers du code C.
Pour l'instant, j'ai pondu une interface en C qui contient un paquet
de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
{
if (setjmp (error_manager.setjmp_buffer))
{
return 0;
}
jpeg_start_decompress (cinfo);
return 1;
}
Si quelqu'un a une meilleure solution...
Merci d'avance.
Bonjour,
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme suit :
on fournit une fonction "my_error_exit()", qui doit se démerder pour
arrêter le code. (La fonction par défaut appelle exit().)
Dans cette fonction, je vois deux choix possibles :
1- longjmp() (avec un setjmp() dans le code appelant)
2- throw une_exception;
Au moins sur mon compilateur (VC++ 2008), la première solution est
officiellement non gérée :
"Do not use setjmp and longjmp in C++ programs; these functions do not
support C++ object semantics."
<http://msdn.microsoft.com/en-us/library/yz2ez4as(VS.80).aspx>
Lancer une exception serait bien agréable, mais j'ai cru lire qu'il ne
fallait pas laisser se propager une exception à travers du code C.
Pour l'instant, j'ai pondu une interface en C qui contient un paquet
de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
{
if (setjmp (error_manager.setjmp_buffer))
{
return 0;
}
jpeg_start_decompress (cinfo);
return 1;
}
Si quelqu'un a une meilleure solution...
Merci d'avance.
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme
suit : on fournit une fonction "my_error_exit()", qui doit se
démerder pour arrêter le code. (La fonction par défaut appelle
exit().)
Dans cette fonction, je vois deux choix possibles :
1- longjmp() (avec un setjmp() dans le code appelant)
2- throw une_exception;
Au moins sur mon compilateur (VC++ 2008), la première solution est
officiellement non gérée :
"Do not use setjmp and longjmp in C++ programs; these functions do not
support C++ object semantics."
<http://msdn.microsoft.com/en-us/library/yz2ez4as(VS.80).aspx>
Lancer une exception serait bien agréable, mais j'ai cru lire
qu'il ne fallait pas laisser se propager une exception à
travers du code C.
Pour l'instant, j'ai pondu une interface en C qui contient un
paquet de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
{
if (setjmp (error_manager.setjmp_buffer))
{
return 0;
}
jpeg_start_decompress (cinfo);
return 1;
}
Si quelqu'un a une meilleure solution...
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme
suit : on fournit une fonction "my_error_exit()", qui doit se
démerder pour arrêter le code. (La fonction par défaut appelle
exit().)
Dans cette fonction, je vois deux choix possibles :
1- longjmp() (avec un setjmp() dans le code appelant)
2- throw une_exception;
Au moins sur mon compilateur (VC++ 2008), la première solution est
officiellement non gérée :
"Do not use setjmp and longjmp in C++ programs; these functions do not
support C++ object semantics."
<http://msdn.microsoft.com/en-us/library/yz2ez4as(VS.80).aspx>
Lancer une exception serait bien agréable, mais j'ai cru lire
qu'il ne fallait pas laisser se propager une exception à
travers du code C.
Pour l'instant, j'ai pondu une interface en C qui contient un
paquet de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
{
if (setjmp (error_manager.setjmp_buffer))
{
return 0;
}
jpeg_start_decompress (cinfo);
return 1;
}
Si quelqu'un a une meilleure solution...
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme
suit : on fournit une fonction "my_error_exit()", qui doit se
démerder pour arrêter le code. (La fonction par défaut appelle
exit().)
Dans cette fonction, je vois deux choix possibles :
1- longjmp() (avec un setjmp() dans le code appelant)
2- throw une_exception;
Au moins sur mon compilateur (VC++ 2008), la première solution est
officiellement non gérée :
"Do not use setjmp and longjmp in C++ programs; these functions do not
support C++ object semantics."
<http://msdn.microsoft.com/en-us/library/yz2ez4as(VS.80).aspx>
Lancer une exception serait bien agréable, mais j'ai cru lire
qu'il ne fallait pas laisser se propager une exception à
travers du code C.
Pour l'instant, j'ai pondu une interface en C qui contient un
paquet de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
{
if (setjmp (error_manager.setjmp_buffer))
{
return 0;
}
jpeg_start_decompress (cinfo);
return 1;
}
Si quelqu'un a une meilleure solution...
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme suit :
on fournit une fonction "my_error_exit()", qui doit se démerder pour
arrêter le code. (La fonction par défaut appelle exit().)
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme suit :
on fournit une fonction "my_error_exit()", qui doit se démerder pour
arrêter le code. (La fonction par défaut appelle exit().)
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
La gestion d'erreurs dans cette bibliothèque fonctionne comme suit :
on fournit une fonction "my_error_exit()", qui doit se démerder pour
arrêter le code. (La fonction par défaut appelle exit().)
En somme, elles n'appellent pas les destructeurs. Ça, on le
savait déjà.
mais j'ai cru lire
qu'il ne fallait pas laisser se propager une exception à
travers du code C.
Ça dépend de l'implémentation. Sur la plupart des
implémentations, ça ne pose pas de problèmes, sauf... il n'y a
pas d'exceptions en C, et donc, le code s'attend probablement à
ce que quand il appelle une fonction, cette fonction retourne
d'où elle a été appelée (de façon à ce qu'il fait le ménage).
Pour l'instant, j'ai pondu une interface en C qui contient un
paquet de fonctions de ce style :boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
D'après ce que j'ai
lu, ils ont prévu la possiblité des données client dans la
structure de contrôle ; sers-t-en pour passer les informations
qui t'intéressent,
puis lever l'exception dans le cas d'erreur de setjmp.
En somme, elles n'appellent pas les destructeurs. Ça, on le
savait déjà.
mais j'ai cru lire
qu'il ne fallait pas laisser se propager une exception à
travers du code C.
Ça dépend de l'implémentation. Sur la plupart des
implémentations, ça ne pose pas de problèmes, sauf... il n'y a
pas d'exceptions en C, et donc, le code s'attend probablement à
ce que quand il appelle une fonction, cette fonction retourne
d'où elle a été appelée (de façon à ce qu'il fait le ménage).
Pour l'instant, j'ai pondu une interface en C qui contient un
paquet de fonctions de ce style :
boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
D'après ce que j'ai
lu, ils ont prévu la possiblité des données client dans la
structure de contrôle ; sers-t-en pour passer les informations
qui t'intéressent,
puis lever l'exception dans le cas d'erreur de setjmp.
En somme, elles n'appellent pas les destructeurs. Ça, on le
savait déjà.
mais j'ai cru lire
qu'il ne fallait pas laisser se propager une exception à
travers du code C.
Ça dépend de l'implémentation. Sur la plupart des
implémentations, ça ne pose pas de problèmes, sauf... il n'y a
pas d'exceptions en C, et donc, le code s'attend probablement à
ce que quand il appelle une fonction, cette fonction retourne
d'où elle a été appelée (de façon à ce qu'il fait le ménage).
Pour l'instant, j'ai pondu une interface en C qui contient un
paquet de fonctions de ce style :boolean JpegStartDecompress (struct jpeg_decompress_struct* cinfo)
D'après ce que j'ai
lu, ils ont prévu la possiblité des données client dans la
structure de contrôle ; sers-t-en pour passer les informations
qui t'intéressent,
puis lever l'exception dans le cas d'erreur de setjmp.
Fabien LE LEZ wrote on 07/07/2008 10:04:
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
de laquelle parle-t-on ?
j'ai transcris en C++ une partie de la lib IJG Jpeg-6a il y a qlq années
(partie compression uniquement), mis à part les appels invalides (que je
traite en amont) seules les allocations nécessitaient un gestionnaire
d'erreurs,
Fabien LE LEZ wrote on 07/07/2008 10:04:
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
de laquelle parle-t-on ?
j'ai transcris en C++ une partie de la lib IJG Jpeg-6a il y a qlq années
(partie compression uniquement), mis à part les appels invalides (que je
traite en amont) seules les allocations nécessitaient un gestionnaire
d'erreurs,
Fabien LE LEZ wrote on 07/07/2008 10:04:
J'essaie d'utiliser une bibliothèque écrite en C (libjpeg).
de laquelle parle-t-on ?
j'ai transcris en C++ une partie de la lib IJG Jpeg-6a il y a qlq années
(partie compression uniquement), mis à part les appels invalides (que je
traite en amont) seules les allocations nécessitaient un gestionnaire
d'erreurs,
J'avais mis ces fonctions dans un .c, histoire de les faire compiler
par le compilateur C, et donc m'assurer que setjmp/longjmp ne pouvait
en aucun cas interférer avec quelque objet C++ que ce soit.
J'avais mis ces fonctions dans un .c, histoire de les faire compiler
par le compilateur C, et donc m'assurer que setjmp/longjmp ne pouvait
en aucun cas interférer avec quelque objet C++ que ce soit.
J'avais mis ces fonctions dans un .c, histoire de les faire compiler
par le compilateur C, et donc m'assurer que setjmp/longjmp ne pouvait
en aucun cas interférer avec quelque objet C++ que ce soit.
Malheureusement la décompression est une autre paire de manches,
puisqu'on peut avoir une erreur si le fichier n'est pas un fichier
JPEG correct.
Malheureusement la décompression est une autre paire de manches,
puisqu'on peut avoir une erreur si le fichier n'est pas un fichier
JPEG correct.
Malheureusement la décompression est une autre paire de manches,
puisqu'on peut avoir une erreur si le fichier n'est pas un fichier
JPEG correct.
J'avais mis ces fonctions dans un .c, histoire de les faire compiler
par le compilateur C, et donc m'assurer que setjmp/longjmp ne pouvait
en aucun cas interférer avec quelque objet C++ que ce soit.
J'avais mis ces fonctions dans un .c, histoire de les faire compiler
par le compilateur C, et donc m'assurer que setjmp/longjmp ne pouvait
en aucun cas interférer avec quelque objet C++ que ce soit.
J'avais mis ces fonctions dans un .c, histoire de les faire compiler
par le compilateur C, et donc m'assurer que setjmp/longjmp ne pouvait
en aucun cas interférer avec quelque objet C++ que ce soit.