2009-02-26 11 views
4

J'ai une DLL qui est créée en C# dans le but de fournir une interface COM à une bibliothèque C# tierce partie. J'ai un programme C++ qui utilise cette interface COM pour pouvoir communiquer avec la bibliothèque C#. Parfois, les exceptions sont lancées du côté C# et tout ce que je récupère du côté C++ est un HRESULT de l'invocation COM qui dit "exception" (ou quelque chose comme ça). Est-il possible pour moi d'obtenir toutes les informations d'exception afin que je puisse imprimer un message informatif dans le journal de mon application C++? Sinon, y a-t-il quelque chose que je puisse faire du côté C# pour intercepter toutes les exceptions avant qu'elles ne déclenchent quel mécanisme renvoie le HRESULT en C++ pour que je puisse les enregistrer du côté C#?comment gérer les exceptions dans DLL C# chargées par C++

Répondre

4

Il existe un mappage d'une exception gérée à un HRESULT. Consultez le tableau au this MSDN article. .NET récupère les informations d'erreur d'un objet COM avec IErrorInfo. Cela pourrait bien marcher dans l'autre sens. Ça vaut le coup.

+0

Ma lecture à ce lien que vous avez fourni me donne l'espoir. Connaissez-vous une classe ATL qui fait toutes les interrogations d'interfaces nécessaires pour moi, ou est-ce que je vais devoir le faire moi-même? – rmeador

+0

ATL implémente IErrorInfo, vous voulez aller dans l'autre sens. C'est une interface très simple. ISupportErrorInfo :: InterfaceSupportsErrorInfo() en premier, puis IErrorInfo :: GetDescription(). Q pour obtenir les pointeurs d'interface. –