Précédent   Forum des professionnels en informatique > Général Développement > Programmation système > Windows
Windows Forum d'entraide sur la programmation Windows. Tutoriel API Windows
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/01/2012, 08h30   #1
 
Inscription : mai 2011
Messages : 216
Détails du profil
Informations personnelles :
Localisation : France, Vienne (Poitou Charente)

Informations forums :
Inscription : mai 2011
Messages : 216
Points : -3
Points : -3
Par défaut Unhandled exception provoqué

Bonjour,

J'ai l'impression que le mnemonique try except fonctionne sauf si c'est une pile personnaliser.

Code :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
void provoqueexception()
{
	__try
	{
		char *p=NULL;
		*p=5;
	}
	__except(1)
	{
		printf("Exception\n");
	}
}

void cbon()
{
	provoqueexception();
}

#define size_stack 0x10000

unsigned long retesp;
char mapile[size_stack];

void cpasbon()
{
	_asm 
	{
		mov eax,esp
		mov retesp,eax
		lea eax,[mapile];
		add eax,size_stack
		mov esp,eax
	}
	provoqueexception();
	_asm
	{
		mov eax,retesp
		mov esp,eax
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	printf("\nAppel de la fonction cbon ..."); cbon();
	printf("\nAppel de la fonction cbon ..."); cpasbon();
	return 0;
}
Dans la fonction cpasbon , le handler exception ne fonctionne pas car il s'agit d'une pile propre à l'utilisateur.
Pouvez - vous m'aider à résoudre le probléme ?
Aucun intêret , oui , mais j'ai absolument besoin de le faire fonctionner.

Y a t'il une API Windows à appeler aprés et restauration de la pile ?
Si oui je ne sais pas laquelle.

Merci.
yann458 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 09h42   #2
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 21 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

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

Informations forums :
Inscription : septembre 2005
Messages : 21 481
Points : 28 760
Points : 28 760
Envoyer un message via MSN à Médinoc
À ma connaissance, Windows vérifie que la pile est la bonne lors d'un traitement d'exception, pour éviter les "problèmes".

Et les "safe exception handlers" sont encore plus draconiens.

Si tu veux pouvoir utiliser plusieurs piles dans un même thread, utilise des fibres.

PS: Les nombres magiques, caymal: Utilise EXCEPTION_EXECUTE_HANDLER.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 20h50   #3
 
Inscription : mai 2011
Messages : 216
Détails du profil
Informations personnelles :
Localisation : France, Vienne (Poitou Charente)

Informations forums :
Inscription : mai 2011
Messages : 216
Points : -3
Points : -3
Citation:
Envoyé par Médinoc Voir le message
À ma connaissance, Windows vérifie que la pile est la bonne lors d'un traitement d'exception, pour éviter les "problèmes".

Et les "safe exception handlers" sont encore plus draconiens.

Si tu veux pouvoir utiliser plusieurs piles dans un même thread, utilise des fibres.

PS: Les nombres magiques, caymal: Utilise EXCEPTION_EXECUTE_HANDLER.

Utiliser des fibres , mais comment ??
j'ai chercher dans google "fibres,exception,programmation" et j'ai rien trouver.
yann458 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 07h12   #4
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 21 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

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

Informations forums :
Inscription : septembre 2005
Messages : 21 481
Points : 28 760
Points : 28 760
Envoyer un message via MSN à Médinoc
La première question, c'est: Pourquoi utilises-tu une pile autre que celle qui t'est fournie par le système?

Et la seconde question est: Peux-tu faire la même chose avec des fibres? (voir CreateFiber(), ConvertThreadToFiber(), SwitchToFiber()).
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h53.


 
 
 
 
Partenaires

Hébergement Web