Gestion des exception d'une Dll en C++ dans C#

galaxio82 Messages postés 1 Date d'inscription mercredi 6 août 2014 Statut Membre Dernière intervention 6 août 2014 - 6 août 2014 à 12:03
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 23 août 2014 à 16:15
Bonjour
Je suis en train de développer une application web en C#, dans laquelle j'utilise des fonctions depuis une DLL implémentée en C++.
les exceptions dans ces DLL génère des erreurs messagesBox. Ces messageBox bloquent mon programme C#. est ce que je peux détecter ces exceptions
A voir également:

2 réponses

billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
Modifié par billou_13 le 19/08/2014 à 09:06
Bonjour,

A mon humble avis, tu ne pourras pas y faire grand chose mis à part avoir le code C++ et corriger.
S'il s'agit d'une erreur pure C++ (et pas d'une exception C++), je ne vois pas de moyen.

Maintenant, je me trompe peut-être et te conseille de regarder sur le net.
Dans tous les cas, voici un lien super intéressant sur le sujet: http://limbioliong.wordpress.com/2011/10/13/using-structured-exception-handling-to-handle-exceptions-from-c-in-c/ .

Bon développement,

Billou_13

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
21 août 2014 à 11:45
Salut,

il ne pourra en effet rien y faire : d'après son post l'exception est gérée en c++ et affiche un message.

Tout ce qu'il te serai possible de faire, c'est d'avoir un thread qui checkera les process en cours pour récupérer les handle et fermer les messageBox. Mais honnêtement il y a pas mal de difficultés qui risquent d'être rencontrée (principalement vis à vis des droits de lectures de certains paramètres des processus).

tu pourras utiliser (c'est le code qui te permettra d'appeler les méthodes en c#) :


[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);


[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("kernel32.dll")]
static extern int GetProcessId(IntPtr handle);


je te laisse chercher à partir de là ;)

naga
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
23 août 2014 à 16:15
Salut,

Si les erreurs dont tu parles remontent depuis le runtime,
tu pourrais peut être essayer de catcher ces exceptions depuis l'appDomain et/ou d'intercepter les exceptions "non managées" en utilisant COMException : ExternalException

Par exemple :

static class Program
{
    [STAThread]
    static void Main()
    {
        /* Exceptions managées non prévues */
        AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

        /* Essaye de récupérer les exceptions "non managées" */
        try
        {
            Application.Run(new Form1());
        }
        catch (System.Runtime.InteropServices.COMException ce)
        {
            //ce.Message
        }
    }

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        //e.ExceptionObject
    }
}


Je ne garantis pas que cela corresponde exactement à ton problème mais tu peux toujours essayer.

bye...
0
Rejoignez-nous