2010-01-31 13 views
7

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

2

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.

+0

Eso lleva años. Quiero tener acceso a todas las funciones en una clase. –

+0

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

+1

Crear una buena interfaz de usuario en C++ es un dolor de cabeza. (En mi humilde opinión) –

1

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.

+1

¿Está recomendando violaciónes de derechos de autor? – dtb

+0

No es una violación de derechos de autor cuando solo hay una forma correcta de hacerlo. – Josh

+1

@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

1

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.

Cuestiones relacionadas