2010-06-25 20 views
11

¿Existe una ventanilla única para determinar qué tipos/atributos de .NET se deben utilizar, dado un tipo nativo?¿Cómo saber qué tipo utilizar de P/Invoke?

ejemplo sería algo como esto:

Native Type | .NET Type 
--------------------------------------- 
    int   | Integer 
    int*   | IntPtr (or is it ref int?) 
    LPCSTR   | [MarshalAs(UnmanagedType.LPStr)]String 
    ... 

Guidelines for custom structures: 
    ... 

También, como relacionado a un lado, ¿cuál es el lugar más confiable para buscar declaraciones de clasificación para Win32 funciones?

Respuesta

8

pinvoke.net es un gran recurso para las firmas de función win32. De lo contrario, realmente tiene que mirar los archivos de inclusión de C/C++ para descubrir los argumentos y la convención de llamadas. Las estructuras complejas son un poco más difíciles, pero la forma más fácil es generalmente declarar la estructura en C# utilizando el atributo StructLayout para asegurarse de que todos los campos estén alineados.

No conozco un solo recurso que lo abarque todo para hacer esto (eso no significa que no exista, solo que no lo sé) pero hay mucha información en MSDN acerca de hacer esto.

+0

que responde a la de lado, pero ¿qué pasa con la pregunta? La razón por la que pregunto es que necesito P/Invocar algunas funciones de dll's internas. –

+0

Solo respondo a las preguntas. Bueno, vale, he editado mi respuesta. –

1

Otra herramienta pinvoker para Visual Studio

http://www.pinvoker.com/

Y otra herramienta que convierte un conjunto administrado determinado de archivos y genera un archivo DLL administrado:

http://www.paulyao.com/res/pinvoke/pinvoke.aspx

Por último, si usted don No desea descargar ninguna herramienta, siempre puede consultar la referencia en línea de pinvoke.net para todas las bibliotecas no administradas para obtener el pinvoke/mariscal como definiciones:

http://www.pinvoke.net/default.aspx/kernel32.waitforsingleobject

1

me gusta la interop assistant. Dale tu declaración (de función o tipo - necesitas el tipo si es un parámetro para la función) y te da el código VB o C#.

Cuestiones relacionadas