Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le forçage de type d’un RCW dans une interface
Le forçage de type d’un wrapper RCW dans une interface marquée comme InterfaceIsIInspectable maintenant lève une PlatformNotSupportedException. Cette modification est consécutive à la suppression de la prise en charge de WinRT par .NET.
Version introduite
.NET 5
Description de la modification
Dans les versions précédentes de .NET, le forçage de type d’un RCW dans une interface marquée comme InterfaceIsIInspectable fonctionnait comme prévu. À partir de .NET 5, le forçage de type d’un RCW dans une interface marquée comme InterfaceIsIInspectable lève une PlatformNotSupportedException au moment du cast.
Raison de la modification
La prise en charge de InterfaceIsIInspectable a été supprimée. Étant donné que le support sous-jacent dans le runtime n’existe plus, la levée d’une PlatformNotSupportedException permet un chemin de défaillance gracieux. La levée d’une exception rend également plus détectable que cette fonctionnalité n’est plus prise en charge.
Action recommandée
Si vous pouvez définir l’interface dans un fichier de métadonnées Windows Runtime (WinMD), utilisez l’outil C#/WinRT à la place.
Sinon, marquez l'interface InterfaceIsIUnknown au lieu de InterfaceIsIInspectable, puis ajoutez trois entrées factices au début de l’interface pour les méthodes InterfaceIsIInspectable. L’extrait de code suivant montre un exemple.
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IMine { // Do not call these three methods. // They're exclusively to fill in the slots in the vtable. void GetIIdsSlot(); void GetRuntimeClassNameSlot(); void GetTrustLevelSlot(); // The original members of the IMine interface go here. ... }