Microsoft tiene un envoltorio de API de Windows muy agradable incluido en .NET framework. Se almacena en Microsoft.Win32.UnsafeNativeMethods, Microsoft.Win32.SafeNativeMethods y Microsoft.Win32.NativeMethods .Unfortunately no son accesibles, ya que se declaran como privado. ¿Hay alguna manera de acceder a ellos fácilmente?¿Cómo acceder a Microsoft.Win32.UnsafeNativeMethods?
Respuesta
La mayoría de las definiciones de métodos en esas clases (si no todas) son declaraciones extern
con DllImport atributos que hacen referencia a funciones en la API de Windows a través de P/Invocar. En no importa dónde residen estas declaraciones. Puede crear su propia clase llamada UnsafeNativeMethods o SafeNativeMethods y colocar declaraciones que hagan referencia a las mismas funciones API de Windows allí. Encontrará las firmas de muchas funciones API de Windows para C# en pinvoke.net.
La mayor parte de la funcionalidad contenida en estas clases está expuesta por el propio framework .Net; debe buscar (o preguntar aquí) antes de hacer llamadas a la API.
Para responder a su pregunta, no.
Lo mejor que puede hacer es copiarlos desde Reflector o la fuente de referencia.
¿Está recomendando violaciónes de derechos de autor? – dtb
No es una violación de derechos de autor cuando solo hay una forma correcta de hacerlo. – Josh
@Nick Brooks: "Código abierto" es un término bien definido. Y no se aplica a la licencia para examinar el código fuente para fines personales o académicos (según el cual la fuente de referencia tiene licencia). – dtb
Por lo que vale siempre pensé que debería haber habido un kernel32.interop.dll, etc. con los métodos estáticos ya DllImport'ed. Pero he recurrido a crear el mío según sea necesario. A lo largo de los años, he descubierto que rara vez uso más que un puñado de ellos, pero me duele mucho cuando necesito una API que aún no haya importado.
El motivo podría ser el impacto de seguridad de SuppressUnmanagedCodeSecurityAttribute. Compruebe Move P/Invokes to NativeMethods class
- 1. ¿Cuándo Microsoft.Win32.OpenFileDialog.ShowDialog() devuelve nulo?
- 2. Cómo acceder a GetGlobalResourceObject()
- 3. ¿Cómo paso las credenciales a una máquina para que pueda usar Microsoft.Win32.RegistryKey.OpenRemoteBaseKey() en él?
- 4. acceder a la ViewStub'child
- 5. ¿Cómo acceder a Java Enum en ColdFusion?
- 6. ¿Cómo acceder a la solicitud en JspTags?
- 7. ¿Cómo acceder a FileTables desde Entity Framework?
- 8. Cómo acceder a WinRM en C#
- 9. ¿Cómo acceder a los elementos de lista
- 10. Typo3 eID, cómo acceder a la configuración
- 11. ¿Cómo puedo acceder a memcached con Javascript?
- 12. ¿Cómo acceder a localStorage en node.js?
- 13. Cómo acceder a ApplicationContext desde un controlador
- 14. cómo acceder a JSON.parsed objeto en Javascript
- 15. Cómo acceder a los atributos usando Nokogiri
- 16. JNI cómo acceder a Java Object (Integer)
- 17. Cómo acceder a webkit-fake-url
- 18. ¿Cómo acceder a meta OpenGraph con cheerio?
- 19. Cómo usar SharedAccessSignature para acceder a blobs
- 20. Cómo acceder a los parámetros anidados
- 21. ¿Cómo puedo acceder a SQLite con C#?
- 22. ¿Cómo acceder a Event.target en IE9?
- 23. Cómo acceder a las variables locales dinámicas
- 24. ¿Cómo acceder a Wikipedia desde R?
- 25. Qt cómo acceder a los recursos
- 26. ¿Cómo acceder a los recursos de prueba?
- 27. Cómo acceder a res/dibujable/"carpeta"
- 28. Cómo acceder a anidada datos JSON
- 29. Cómo acceder a Seconds_Behind_Master desde SQL
- 30. ¿Cómo acceder a una propiedad numérica?
Eso lleva años. Quiero tener acceso a todas las funciones en una clase. –
Como escribió @SLaks, muchas funciones de API ya están expuestas como clases administradas en .NET Framework, por ejemplo, acceso de registro, ventanas, GDI. Por lo general, no toma tanto tiempo copiar un par de firmas de métodos de un sitio web en un archivo C#. Si depende en gran medida de la API de Windows y no utiliza .NET Framework, ¿por qué no utilizar un lenguaje de programación más apropiado? – dtb
Crear una buena interfaz de usuario en C++ es un dolor de cabeza. (En mi humilde opinión) –