Partager via


Le forçage de type d’un RCW dans une interface InterfaceIsIInspectable lève PlatformNotSupportedException

Le forçage de type d’un wrapper RCW dans une interface marquée comme InterfaceIsIInspectable maintenant lève une PlatformNotSupportedException. Ce changement est une suite à la suppression du support de WinRT de .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 du changement

Le support de InterfaceIsIInspectable a été supprimé. É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 permet de vérifier clairement que cette fonctionnalité n’est plus prise en charge.

  • Si vous pouvez définir l’interface dans un fichier de métadonnées de runtime Windows (WinMD), utilisez plutôt l’outil C#/WinRT.

  • Sinon, marquez l’interface comme InterfaceIsIUnknown étant au lieu de InterfaceIsIInspectable et ajoutez trois entrées factices au début de l’interface pour les méthodes InterfaceIsIInspectable. L’extrait de code suivant affiche 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.
        ...
    }
    

API affectées