2010-05-18 7 views
0

J'ai récemment mis à niveau mon projet de Visual Studio 2008 vers Visual Studio 2010.Pourquoi est-ce que je reçois CA1806 quand j'attrape une exception dans C++/CLI?

En activant l'analyse de code et la compilation dans Release, j'obtiens l'avertissement CA1806: N'ignorez pas les résultats de la méthode.

J'ai réussi à réduire le code qui produit l'avertissement à ce code:

.h:

public ref class Foo 
{ 
public: 
    void Bar(); 
}; 

fichier .cpp:

void Foo::Bar() 
{ 
    try 
    { 
    } 
    catch (const std::exception&) // here I get the warning 
    { 
    } 
} 

l'avertissement:

CA1806: Microsoft.Utilisation: 'Foo :: Bar (void)' appelle 'Global :: __ CxxRegisterExceptionObject (void *, void *)' mais n'utilise pas le code HRESULT ou le code d'erreur renvoyé par la méthode. Cela peut entraîner un comportement inattendu dans des conditions d'erreur ou des situations à faible ressource. Utilisez le résultat dans une instruction conditionnelle , affectez le résultat à une variable ou passez-le comme argument à une autre méthode.

Si je tente d'utiliser la valeur d'exception ou faire catch(...) l'avertissement encore apparaît. Si j'attrape les exceptions gérées à la place ou si je compile dans Debug, je n'obtiens pas l'avertissement.

Pourquoi j'obtiens cet avertissement?

MISE À JOUR

J'ai décidé d'ouvrir a bug report on Microsoft Connect.

+1

Cela ressemble à un bug. – SLaks

Répondre

0

Il s'agit d'un bogue de Visual Studio 2010.

Comme vous pouvez le voir dans le bug report, Microsoft a reproduit le bogue et a décidé de reporter la résolution sans solution de contournement.

Vous pouvez voter pour le bogue, alors peut-être que Microsoft décidera de le résoudre plus tôt.

-1

Peut-être parce que vous n'avez appelé aucun code susceptible d'être lancé.

+1

-1. Comme je l'ai écrit, c'est la version réduite du code original. En tout état de cause, cet avertissement n'a rien à voir avec le fait qu'il n'y a pas de code qui pourrait être lancé. – brickner