Il est connu que Windows SEH ne va pas avec le mécanisme de gestion des exceptions C++. Nous ne pouvons pas utiliser try
et __try
en fonction unique. Cela conduira à une erreur du compilateur:Mélanger '__try' et 'try' dans une seule fonction - Par Lambda
__try
{
try
{
MayThrowCPPException_OR_SEH();
}
catch(...)
{
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
}
Il va rendre:
C2713: Only one form of exception handling permitted per function.
Une option, que la plupart des gens n'aiment pas est "Oui avec des exceptions SEH (/EHa)" option du compilateur . Cela facilitera C++ try/catch pour gérer les deux exceptions. Nous devons mettre cette fonction dans un fichier séparé, et mettre /EHa seulement pour ce fichier source.
Une autre option est de mettre try
(ou __try
) dans une fonction et une autre fonction qui aura __try
(ou try
).
Question commence Tout en essayant de faire ce qui précède, j'ai essayé en ayant juste un C++ lambda pour tromper le compilateur. Voici ce que je faisais:
auto call_this =[]
{
MayThrowCPPException_OR_SEH();
// C++ exception handling here.
};
__try
{
call_this();
}
__except(...)
{
}
Et bien sur cette compilé VC 2013 mise à jour 5.
Est-il sûr de le faire?
cela ne compile pas sur mon VS 2013 .. –
Quelle erreur obtenez-vous? – Ajay
que le lamda lui-même requiers stack déroulement, ce qui est la raison pour laquelle vous vouliez utiliser lambda en premier lieu –