2010-01-08 4 views
1

Est-il possible de lancer des exceptions dans une DLL non gérée et de la gérer dans une application gérée?Comment gérer les exceptions dans des applications mixtes? (application gérée utilisant une DLL non gérée)

Mon non géré C++ DLL lance exceptions en cas d'erreurs, et ils devraient être dans l'application traitées exécutable appelant.

CMyFileException *x = new CMyFileException; 
throw(x); 

Ce précédemment travaillé, mais maintenant l'application est compilé avec différents drapeaux (/ clr etc) parce que nous devons utiliser certains code managé. Lorsque l'exception est levée, je reçois une exception System.ExecutionEngineException qui ne semble pas être interceptée même avec catch (...) dans mon exe appelant.

J'ai vu que l'option du compilateur/clr impliquait/EHa pour la gestion des exceptions, mais cela semblait être l'option de sélectionner autant que je le comprends maintenant.

Existe-t-il une autre alternative (paramètre du compilateur/éditeur de liens) à des exceptions de lancement et de verrouillage sur les limites de module (DLL/exe)?

Nous vous remercions de votre soutien! Marco

Répondre

2

Il y a quelque chose d'autre se passe. Une ExecutionEngineException est levée par le CLR lorsqu'il découvre que le tas collecté par le garbage est corrompu. Ce n'est pas difficile à faire lorsque vous exécutez du code non géré dans un programme géré. Un dépassement de tampon simple est suffisant. Trouver le bug n'est cependant pas facile.

+0

Enfin trouvé - une opération de pointeur attribuant une couleur bitmap avec des bits de bits - échantillon de code MSDN de '92 et 16bit ère. * soupir * Causé un problème qui n'a pas planté l'application du tout, mais beaucoup plus tard régulièrement posé un problème lors de lancer des exceptions (même jeter, sans arguments) ** Merci pour votre soutien! ** – marco4net

0

Il est possible de lancer une exception dans le code non géré, mais l'exception sera éventuellement interceptée par clr et l'encapsulera sous la forme d'exceptions SEH.

vous pouvez lire cette question:

Best practice for translating exceptions in C++/CLI wrapper class

+0

merci pour le lien! lecture intéressante, après avoir corrigé l'opération de pointeur j'ai reçu la bonne exception. – marco4net

Questions connexes