Bonjour,
Je développe actuellement un programme en C#, mais j'ai un petit problème.
Celui marche parfaitement lorsque je le lance depuis visual studio, mais quand je le lance depuis l'exécutable généré, une methode plante ! Je n'arrive pas a comprendre ce que ça pourrais être. Je n'ai aucun message d'erreur. La fonction qui plante est un appel a une DLL C++, qui ne me renvois que True ou False, en fonctionnement normal elle me renvoie True sinon False, en dev j'ai True en prod False, avez vous déjà eu ce genre de problème ?
Comment je pourrais essayer de débugger ça ?
La fonction qui plante fait appel à de la communication série , elle est sensée bootloader un CPU
Merci d'avance

Update :

Après avoir regardé l'observateur d’événements je tombe sur ça :

FlashControl.exe
1.0.0.0
55472931
st10flasher.dll
2.4.0.0
40f3a927
c0000005
0000192d
1664
01d08641a412c546
D:\Developpements\FlashControl\FLASH CONTROL\FlashControl\FlashControl\bin\x86\Debug\FlashControl.exe
D:\Developpements\FlashControl\FLASH CONTROL\FlashControl\FlashControl\bin\x86\Debug\st10flasher.dll
e5f9bf86-f234-11e4-8272-0862660daebe

Ainsi que ça :

Application : FlashControl.exe Version du Framework : v4.0.30319 Description : le processus a été arrêté en raison d'une exception non gérée. Informations sur l'exception : System.AccessViolationException Pile : à FlashControl.com.Dll_CPU_interface.LoadFile(System.String) à FlashControl.logic.CPU_Flasher.load_file(System.String) à FlashControl.views.MainWindows.flasher() à System.Threading.ThreadHelper.ThreadStart_Context(System.Object) à System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) à System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) à System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) à System.Threading.ThreadHelper.ThreadStart()

Update 2 :

Je pense avoir un peu avancé, le problème viens surement de mon marshalling. J'obtiens cette erreur :

Le runtime a rencontré une erreur irrécupérable. L'adresse de l'erreur était 0x6aa5f936 sur le thread 0x22b8. Le code d'erreur est 0xc0000005. Il s'agit peut-être d'un bogue dans le CLR ou dans les portions unsafe ou non vérifiables du code utilisateur. Les causes courantes de ce bogue incluent des erreurs de marshaling utilisateur pour COM-Interop ou PInvoke, erreurs susceptibles d'endommager la pile.

Un extrait de la manière dont j'utilise cette DLL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
        public static extern long AdjustCpuFrequency(double frequency);
        [DllImport(@"st10flasher.dll", CharSet = CharSet.Ansi)]
        public static extern int SetComSpeed(string PortName, int ComSpeed);
        [DllImport(@"st10flasher.dll")]
        public static extern int LoadFile(string FileName);
        [DllImport(@"st10flasher.dll", CharSet = CharSet.Ansi)]
        public static extern int InitMonitor(string Target);
Update (encore)

Piouf ! ça marche, l'erreur venez d'une mauvaise déclaration dans la définitions des fonctions de la DLL , il reste toujours un point obscure, pourquoi ça marchais en dev ? je ne le saurais surement jamais