le programme s'est terminé avec le code -1073610751 (0xc0020001)
J'ai une erreur étrange sur un SharpDX programme que j'ai fait.
Le programme contient un formulaire MainForm
, qui hérite de l' SharpDX.Windows.RenderForm
(je suis en train de faire Direct3D 9). J'ai un peu de logique qui tue le programme en appelant MainForm.Close()
, et il fonctionne parfaitement.
Cependant, lorsque je ferme le formulaire avec le bouton X, ou en double cliquant sur le coin supérieur gauche de l'écran, le programme se termine avec le code -1073610751 (0xc0020001).
Ce qui est relativement mineur à la gêne, car il ne se produit que lorsque le programme est de finition, de sorte qu'il n'a pas vraiment d'importance si elle sort avec une erreur, car c'est en fait la finition.
Toutefois, cette erreur ne se produit pas lorsque j'ai mis un point d'arrêt à la dernière ligne de mon Main()
. Si je le fais, et puis fermez la fenêtre comme je l'ai expliqué, le point d'arrêt se fait frapper, et la reprise de l'termine le programme avec le code 0.
En dehors de SharpDX et un pur DLL C je fais appel à one-shot le traitement de certaines données, je ne fais pas le code mixte, ou tout autre truc bizarre.
J'ai regardé autour, mais ce code semble être lié à la chaîne de liaisons? d'autres personnes semblent avoir ce problème quand on fait bizarre mixte C++/CLI trucs, mais je ne fais pas quelque chose comme ça.
Des idées? au moins sur la façon d'obtenir plus de renseignements concis sur ce code d'erreur?
Peut-être que vous devez déboguer le code aussi à montrer un peu de code aiderait vraiment si c'est une 3ème partie .DLL peut-être vous avez besoin de
Dispose
des objets créés manuellement. Qu'avez-vous essayé jusqu'à présent..?Pourrait-il être? connect.microsoft.com/VisualStudio/feedback/details/336844/...
Je ne le pense pas, parce que comme je l'ai dit, je ne suis pas l'utilisation mixte des assemblées. Sauf SharpDX fait mixte des trucs, mais c'est très peu probable.
Il peut être un problème dans SharpDX lui-même - ou peut-être SharpDX tenter (ou pas) pour nettoyer quelque chose que vous ne nettoyez pas vous-même au dernier moment, par exemple, à l'instar de @DJKRAZE dit, quelque chose que vous devez
Dispose
, ou d'un gestionnaire d'événements, vous devez détacher. Je suis tout à fait sûr que le code d'erreur est le même dans tous les cas (dans ce cas) - la chaîne de liaison de l'erreur, et celui que j'ai lié impliquent des appels de COM (ou code non managé) pour le code managé après l'exécution a commencé à l'arrêt. SharpDX est, en effet, purement de code managé, mais l'appel (et d'être appelé par) COM.OriginalL'auteur Panda Pajama | 2013-08-07
Vous devez vous connecter pour publier un commentaire.
C'est un très faible niveau d'erreur RPC. Qui est susceptible d'être utilisé dans votre programme, c'est le protocole sous-jacent sur le dessus de qui COM fonctionne. Il y a beaucoup de candidats, SharpDX lui-même utilise la couche d'interopérabilité COM pour faire des appels DirectX. Et DirectX lui-même est très susceptibles de faire ces sortes d'appels de votre pilote vidéo.
C'est aussi le type de code d'erreur que vous vous attendez à se déclencher si il y a un arrêt-problème de commande. Comme à l'aide d'une interface COM après il était déjà sorti. Arrêter un programme proprement peut être un problème difficile à résoudre, surtout quand il y a beaucoup de fils. Il y a dans toute DirectX app. Il est également très facile d'ignorer un tel problème, même si il est connu et enregistré à quelqu'un bug de la base de données. Parce que, comme vous l'avez remarqué, le programme s'arrête, d'accord, sans méchant exceptions. RPC déjà empêché d'exploser, vous voyez le code d'erreur généré.
Il ya très peu que vous pouvez faire vous-même à propos de ce problème, c'est un code que vous n'avez pas à écrire, et vous ne trouverez jamais le programmeur qui l'a fait. Si vous voyez une première chance notification d'exception dans la fenêtre de Sortie ensuite, vous pouvez activer le débogueur non managé, utiliser Debug + Exceptions et cochez la Levée de case à cocher pour Win32 exception, activer le serveur de symboles Microsoft et vous aurez une trace de la pile lorsque l'exception est levée. Méfiez-vous, ce sera dans les entrailles de code natif avec aucune source à regarder. Mais il pourrait pin-point de la DLL qui est à l'origine du problème. Toujours rien que vous pouvez faire pour corriger cette DLL. Je recommanderais un pilote vidéo de mise à jour, la source la plus commune de la difficulté. C'est à peu près aussi loin que vous pouvez le prendre.
OriginalL'auteur Hans Passant