2017-10-17 56 views

Répondre

1

COM ne prend pas en charge les exceptions. Ils sont un détail d'implémentation de l'exécution linguistique très fort, une exception C# n'est pas une exception C++. Cela rend HRESULT très important, c'est le substitut. Chaque méthode COM doit renvoyer un code d'erreur, une valeur négative indique un échec.

Mais de nombreuses langues prennent en charge les exceptions. Autoriser l'exécution de la langue à transformer un échec HRESULT en une exception. Donc, la valeur de retour n'est plus nécessaire.

Ce qui permet à l'importateur de bibliothèque de types et au CLR de réécrire la signature de méthode. Le faire ressembler à une fonction "normale", celle qui a une valeur de retour utile. L'attribut [retval] indique ceci. Sans un, il devient une méthode normale qui renvoie vide.

Explique également la pertinence de l'attribut [PreserveSig], il supprime cette réécriture. Parfois nécessaire lorsque le HRESULT renvoie plus que juste 0 pour indiquer le succès. Les itérateurs COM l'exigent pour le Next() method par exemple.