7
votes

Accéder à Microsoft.Win32.unsafenativemethods?

Microsoft a une très belle window Windows welpper incluse dans .NET Framework. Il est stocké dans microsoft.win32.unsafenativemethods , Microsoft.win32.Safenativemethods et Microsoft.win32.nativemethods .nourour, ils ne sont pas accessibles car Ils sont déclarés privés. Y a-t-il un moyen d'y accéder facilement?


0 commentaires

4 Réponses :


2
votes

La plupart des définitions de la méthode dans ces classes (sinon toutes) sont extern déclarations avec DLLIMPORT attributs faisant référence aux fonctions de l'API Windows via p / invoke. Peu importe où ces déclarations résident. Vous pouvez créer votre propre classe nommée Infennativemethods ou SafeNativemethods et proposer des déclarations faisant référence aux mêmes fonctions de l'API Windows. Vous trouverez les signatures de nombreuses fonctions de Windows API pour C # sur pinvoke.net .


3 commentaires

Cela prend des âges. Je veux avoir accès à toutes les fonctions d'une classe.


Comme @slaks a écrit, de nombreuses fonctions de l'API sont déjà exposées sous forme de classes gérés dans le .NET Framework, par exemple l'accès au registre, Windows, GDI. Il ne faut généralement pas si longtemps pour copier quelques signatures de méthodes d'un site Web dans un fichier C #. Si vous êtes fortement dépendant de l'API Windows et n'utilisez pas le framework .NET, pourquoi ne pas utiliser un langage de programmation plus approprié?


Créer une belle interface utilisateur en C ++ est un mal de tête. (A MON HUMBLE AVIS)



1
votes

La plupart des fonctionnalités contenues dans ces classes sont exposées par le cadre .NET elle-même; Vous devriez rechercher (ou demander ici) avant de faire des appels d'API.

Pour répondre à votre question, non.
Le mieux que vous puissiez faire est de les copier du réflecteur ou de la source de référence.


4 commentaires

Ce n'est pas une violation du copyright quand il n'y a qu'un seul moyen de le faire.


@Nick Brooks: "Open Source" est un terme bien défini. Et il ne s'applique pas à la licence pour examiner le code source à des fins personnelles ou académiques (sous lesquelles la source de référence est autorisée).


@JOSH EINSTEIN: Ce n'est pas le seul moyen correct de le faire. La bonne façon de le faire est de rechercher les définitions de la fonction dans la documentation Windows SDK et de les traduire en déclarations P / invoke, comme indiqué sur Pinvoke.net.


Je garantis que MS ne donne pas un cul de rats sur les personnes utilisant le réflecteur pour copier des attributs et des signatures Dllimport.



2
votes

Pour ce que ça vaut, j'ai toujours pensé qu'il aurait dû être un kernel32.interop.dll, etc. avec les méthodes statiques déjà dllimport'ed. Mais j'ai eu recours à la création de la mienne sur une base nécessaire. Au fil des ans que j'ai constaté que j'utilisais rarement plus qu'une poignée, mais c'est une telle douleur dans le cul lorsque j'ai besoin d'une API que je n'ai pas encore importé.


0 commentaires

0
votes

La raison pourrait être l'impact de la sécurité de SuppressunGanageDcodesCodSecurityAttribute. Vérifiez Déplacez P / invoque à Nativemethods Class


0 commentaires