BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
20 févr. 2009 à 17:07
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 2023
-
2 mars 2009 à 13:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 2 mars 2009 à 13:54
Désolé pour le double post mais je montre comment on corrige et on allège le code :
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
try
{
hMutex = CreateMutex(NULL, FALSE,"convert");
if ( GetLastError() == ERROR_ALREADY_EXISTS )
{
//on lève une exception si une instance du programme existait déjà
throw hMutex;
}
//si aucune anomalie n'est survenue(si le programme n'était pas encore lancé),
//on lance le programme.
hinst=hInstance;
DialogBox(hinst,"DIALOG1",NULL,(DLGPROC)DlgProc);
return 0;
}
catch(HANDLE&hMutex)
{
MessageBox(0," convert est déjà en cours d'exécution. ","convert",0);
if (hMutex)
CloseHandle(hMutex);
return FALSE;
}
}
se change en :
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
hMutex = CreateMutex(NULL, FALSE,"convert");
if ( GetLastError() == ERROR_ALREADY_EXISTS )
{
CloseHandle(hMutex);
MessageBox(NULL, "Convert est déjà en cours d'exécution !", "Convert", 16);
return FALSE;
}
//si aucune anomalie n'est survenue(si le programme n'était pas encore lancé),
//on lance le programme.
hinst=hInstance;
DialogBox(hinst,"DIALOG1",NULL,(DLGPROC)DlgProc);
return 0;
}
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 2 mars 2009 à 13:48
Personnellement depuis le temps que je programme à aujourd'hui je ne me suis jamais servis des exceptions.
Les codes d'erreur ou des classes de gestion d'erreur intégrées (la fonction va renvoyer return Erreur("Nom de l'erreur") et c'est cette fonction renvoi false, le programmeur peut décider d'appeller la fonction ou non qui renvoi l'erreur) quand la fonction renvoi false suffit.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 20 févr. 2009 à 17:07
Titre de la source erroné:
RGB = COLORREF et vice versa, il n'y a donc rien à convertir, c'est un DWORD et rien de plus.
La gestion des exceptions C++ (throw, etc.) dans un prog Win API est totalement inutile et donc nuisible aux perfs. L'API indique toujours le statut de réussite, un simple test sur le statut se fait en quelques cycles.
2 mars 2009 à 13:54
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
try
{
hMutex = CreateMutex(NULL, FALSE,"convert");
if ( GetLastError() == ERROR_ALREADY_EXISTS )
{
//on lève une exception si une instance du programme existait déjà
throw hMutex;
}
//si aucune anomalie n'est survenue(si le programme n'était pas encore lancé),
//on lance le programme.
hinst=hInstance;
DialogBox(hinst,"DIALOG1",NULL,(DLGPROC)DlgProc);
return 0;
}
catch(HANDLE&hMutex)
{
MessageBox(0," convert est déjà en cours d'exécution. ","convert",0);
if (hMutex)
CloseHandle(hMutex);
return FALSE;
}
}
se change en :
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
hMutex = CreateMutex(NULL, FALSE,"convert");
if ( GetLastError() == ERROR_ALREADY_EXISTS )
{
CloseHandle(hMutex);
MessageBox(NULL, "Convert est déjà en cours d'exécution !", "Convert", 16);
return FALSE;
}
//si aucune anomalie n'est survenue(si le programme n'était pas encore lancé),
//on lance le programme.
hinst=hInstance;
DialogBox(hinst,"DIALOG1",NULL,(DLGPROC)DlgProc);
return 0;
}
2 mars 2009 à 13:48
Les codes d'erreur ou des classes de gestion d'erreur intégrées (la fonction va renvoyer return Erreur("Nom de l'erreur") et c'est cette fonction renvoi false, le programmeur peut décider d'appeller la fonction ou non qui renvoi l'erreur) quand la fonction renvoi false suffit.
20 févr. 2009 à 17:07
RGB = COLORREF et vice versa, il n'y a donc rien à convertir, c'est un DWORD et rien de plus.
La gestion des exceptions C++ (throw, etc.) dans un prog Win API est totalement inutile et donc nuisible aux perfs. L'API indique toujours le statut de réussite, un simple test sur le statut se fait en quelques cycles.