10
votes

La classe Nativemethods est-elle traitée spécialement dans .NET?

https://msdn.microsoft.com /en-us/Library/ms182161.aspx

Les trois classes sont-elles décrites sur cette pagie gérée spécialement dans le cadre .NET? (Nativemethods, SafeNativemethods et Infennativemethods)

La raison pour laquelle je demande est que je me demande si c'est correct de créer des catégories de classes Nativemethods. Par exemple: xxx


0 commentaires

4 Réponses :


1
votes

Ils ne sont pas gérés spécialement par le CLR. Il s'agit simplement d'une pratique recommandée d'avoir votre p / invoque à l'intérieur d'une classe nommée Nativemethods, SafeNativemethods ou Unsafenativemethods.

Vous verrez que cette recommandation entrera en jeu si vous exécutez FXCop sur vos assemblages.


0 commentaires

3
votes

C'est juste une convention qui dit que vous devriez placer des méthodes p / invoquer dans des classes nommées * Nativemethods, mais il n'y a pas de contrainte technique pour vous empêcher de le faire à votre manière ...


0 commentaires

8
votes

C'est une convention, pas une exigence. Si vous réfléchissez au CLR et jetez un coup d'œil au code de là, vous verrez souvent un code p / invoquer dans une classe Nativemethods. Je crois que FXCop vous recommandera de mettre votre code P / invoke dans une classe comme celle-ci s'il le rencontre.


0 commentaires

2
votes

Vous pouvez nommer vos classes de cette façon, mais vous continuerez à obtenir l'analyse de code AVERTISSEMENT CA1060. Cet avertissement indique que vous ne suivez pas la convention. Donc, pour éviter cet avertissement, vous devez suivre la Convention lors de la nommage des cours qui ont des méthodes p / invoquent. Si vous souhaitez catégoriser vos méthodes P / invoke, vous pouvez utiliser des espaces de noms. Par exemple:

  • myProject.com.nativemethods
  • myProject.user32.nativemethods
  • myProject.olestorage.nativemethods

3 commentaires

Mon interprétation de ce lien est qu'il s'agit d'une convention, et non que le temps d'exécution fait quelque chose de différent. Le développeur est responsable de la mise en place des attributs de sécurité appropriés sur les classes. Par exemple: "Nativemethods - Cette classe ne supprime pas les promenades de pile pour une autorisation de code non gérée. (System.security.SuppressUnManiedCodeSecurityAttribute ne doit pas être appliquée à cette classe.)"


Également pertinent: «Ces classes ressemblent à la classe Nativemethods; Cependant, ils sont marqués à l'aide d'un attribut spécial appelé SuppressunMageDcodesCodesecurityAttribute. Lorsque cet attribut est appliqué, le temps d'exécution n'effectue pas de marche complète pour vous assurer que tous les appelants ont la permission de la numérisation. Le temps d'exécution vérifie généralement cette permission au démarrage. ... Toutefois, vous devez utiliser cet attribut avec beaucoup de soin. Il peut avoir de graves implications de sécurité s'il est mal implémenté .. "


Merci, je suis corrigé. J'ai mis à jour ma réponse.