Je travaille actuellement sur une mise à niveau vers un projet qui utilise COM/MFC/(qui sait combien d'autres technologies). Dans le cadre de la mise à niveau, nous essayons de déplacer autant de fonctionnalités que possible dans le code C# géré, mais malheureusement, certaines choses ne peuvent tout simplement pas bouger (pour des raisons que je n'aborderai pas). L'une de ces choses est une section de code qui abuse grossièrement de COM, et renvoie des pointeurs dans les HRESULT qui seront ensuite transtypés en divers autres objets implémentant l'interface COM. J'ai essayé le code suivant pour convertir un HRESULT en un pointeur que je peux alors obtenir une interface à partir de:Obtenir un objet COM pour lancer une exception sur n'importe quel résultat sauf S_OK (0) dans C#
MyComInterfaceInCS myObj = null;
try
{
world.GetTD_MyComInterfaceInCS();
}
catch (COMException comException)
{
int pointerValue = Marshal.GetHRForException(comException);
IntPtr myObjPointer = new IntPtr(pointerValue);
myObj = (MyComInterfaceInCS) Marshal.GetObjectForIUnknown(myObjPointer);
}
.... mais, aucune exception COM est jeté, et je devine que c'est parce que le pointeur n'est pas une valeur négative, et par conséquent n'est techniquement pas une erreur COM. Y a-t-il un moyen de configurer COM sur l'objet pour lancer une exception COM sur quelque chose MAIS S_OK (0)?
Pointeurs dans le HRESULT? Sensationnel. Douleur. –
Oh mon dieu! Toi pauvre âme ... – dkackman