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

Signaler
Messages postés
1
Date d'inscription
mercredi 6 août 2014
Statut
Membre
Dernière intervention
6 août 2014
-
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
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

2 réponses

Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
17
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
---------------------
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16
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
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
18
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...