J'ai un composant COM VB6 que j'ai besoin d'appeler avec ma méthode .Net. J'utilise la réflexion pour créer une instance de l'objet COM et l'activer de la manière suivante:Récupération du numéro d'erreur d'origine à partir d'une méthode COM appelée par réflexion
f_oType = Type.GetTypeFromProgID(MyProgId);
f_oInstance = Activator.CreateInstance(f_oType);
-je utiliser plutôt GetTypeFromProgID que d'utiliser tlbimp pour créer une bibliothèque contre la DLL COM comme ProgId du type I besoin d'instancier peut varier. J'utilise ensuite Type.InvokeMember pour appeler la méthode COM dans mon code comme:
f_oType.InvokeMember("Process", BindingFlags.InvokeMethod, null, f_oInstance, new object[] { param1, param2, param3, param4 });
J'attrape tout a soulevé TargetInvocationException pour l'exploitation forestière et peut obtenir la description détaillée des erreurs du champ TargetInvocationException.InnerException. Cependant, je sais que le composant COM utilise Error.Raise pour générer un numéro d'erreur et je dois en quelque sorte me procurer dans mon application .Net appelant.
Le problème semble provenir de l'TargetInvocationException ne contenant pas le numéro d'erreur que je pense si elle était une COMException normale si:
Comment puis-je obtenir le numéro d'erreur dans l'objet COM dans mon. Code net?
ou
Puis-je faire ce même appel d'une manière qui causerait un COMException (contenant le numéro d'erreur) plutôt que d'un TargetInvocationException lorsque le composant COM échoue?
S'il vous plaît noter également que la plate-forme cible est .Net 2.0 et j'ai accès au code source VB6 mais considérerait modifier le message d'erreur élevé de VB6 pour contenir le code d'erreur dans le cadre du texte à une un peu d'un hack.
Ce obtenu. A été lancé au début car l'InnerException ne revenait pas en tant que COMException, cependant l'enquête a montré que le composant COM soulevait l'erreur de manière incorrecte. Fixé cela et cela fonctionne un régal – Wolfwyrd