Compartir a través de


Ejemplo de tecnología de invocación de plataformas

Actualización: noviembre 2007

Este ejemplo muestra las técnicas empleadas para llamar a las funciones exportadas de una biblioteca no administrada. Muestra cómo:

  • Declarar tipos diferentes.

  • Utilizar los atributos disponibles para modificar el comportamiento predeterminado.

  • Utilizar métodos del tipo Marshal.

  • Determinar qué aspectos de la recolección de elementos no utilizados y del subprocesamiento pueden afectar a los resultados.

Algunos de los ejemplos utilizan funciones exportadas de las bibliotecas de Windows y otros utilizan funciones exportadas de una biblioteca personalizada. Ciertos ejemplos utilizan bibliotecas que no están disponibles en todas las plataformas de Windows o utilizan funciones no admitidas en todas ellas. Sin embargo, esto no le impedirá entender las reglas de invocación específicas de la plataforma utilizadas en cada ejemplo.

Estos ejemplos contienen la siguiente estructura de directorios:

Directorio

Contenido

WinAPIs

Invocación de plataformas mostrada utilizando las funciones exportadas de las bibliotecas de Windows

WinAPIs\CS

Código fuente escrito en C#

WinAPIs\VB

Código fuente escrito en Visual Basic

Custom

Invocación de plataformas mostrada utilizando las funciones exportadas de una biblioteca de tipos personalizada

Custom\CS

Código fuente escrito en C#

Custom\LIB

Código fuente de la biblioteca de tipos personalizada

Custom\VB

Código fuente escrito en VB

Para obtener información sobre el uso de los ejemplos, consulte los temas siguientes:

Download sample

Para generar los ejemplos desde el símbolo del sistema:

  1. Abra una ventana del símbolo del sistema y navegue hasta el subdirectorio específico de uno de los lenguajes.

  2. Escriba msbuild [nombre de archivo].sln en la línea de comandos.

    Nota:

    Los ejemplos de invocación de plataforma personalizados sólo se pueden generar con Visual Studio.

Para generar los ejemplos mediante Visual Studio:

  1. Abra el Explorador de Windows y navegue hasta el subdirectorio específico de uno de los lenguajes.

  2. Haga doble clic en el icono de [nombre de archivo].sln para abrir el archivo en Visual Studio.

  3. En el menú Generar, seleccione Generar solución.

Para ejecutar los ejemplos:

  1. Navegue hasta el subdirectorio específico de uno de los lenguajes bajo el directorio WinAPIs o Custom, que contiene los archivos ejecutables generados.

  2. Escriba el nombre del archivo ejecutable en la línea de comandos.

    Nota:

    Este ejemplo genera aplicaciones de consola. Para poder ver el resultado, debe iniciar cada una de ellas desde la línea de comandos.

Requisitos

En estos ejemplos, son necesarios los encabezados de Windows, que estarán disponibles para el proyecto si realizó la compilación con Microsoft Visual Studio 2005, el símbolo del sistema de Visual Studio 2005, o si tiene instalado Platform SDK y está especificado en una ruta de acceso de inclusión.

Comentarios

Las tablas siguientes resumen los temas mostrados por estos ejemplos y muestran las ubicaciones de los archivos de código fuente para el ejemplo o los ejemplos relacionados con cada tema.

Cómo utilizar los atributos de invocación de plataformas

Atributo

Descripción

Código de

EntryPoint

Cambia el nombre de una función para su uso en el código administrado.

WinAPIs\CS\MsgBox.cs WinAPIs\VB\MsgBox.vb

CharSet

Elige la forma de calcular las referencias a las cadenas; también afecta al criterio de búsqueda de nombres de funciones.

WinAPIs\CS\MsgBox.cs WinAPIs\VB\MsgBox.vb

ExactSpelling

Indica si el nombre del punto de entrada del archivo DLL no administrado se debe modificar para que se corresponda con el valor de CharSet.

WinAPIs\CS\MsgBox.cs WinAPIs\VB\MsgBox.vb

CallingConvention

Llama a las funciones con varargs.

WinAPIs\CS\Printf.cs WinAPIs\VB\Printf.vb

PreserveSig

Modifica las funciones que devuelven HRESULTs.

WinAPIs\CS\CreateObject.cs WinAPIs\VB\CreateObject.vb

SetLastError

Garantiza que el código de error se guarde tras la llamada a una función.

WinAPIs\CS\Errors.cs WinAPIs\VB\Errors.vb

Cómo calcular las referencias a las estructuras y uniones

Tipo

Descripción

Código de

Estructura ByVal

Pasa una estructura como parámetro In.

Custom\CS\Structs.cs Custom\VB\Structs.vb

Estructura ByRef

Pasa una estructura como parámetro In/Out.

WinAPIs\CS\OSInfo.cs WinAPIs\VB\OSInfo.vb

Clase ByVal

Pasa una clase sólo con miembros enteros como parámetro In/Out.

WinAPIs\CS\SysTime.cs WinAPIs\VB\SysTime.vb

Estructura con estructuras anidadas (simplificada)

Genera una clase que representa una estructura con estructuras anidadas en la parte no administrada. La estructura se simplifica en una gran estructura en la parte administrada.

WinAPIs\CS\FindFile.cs WinAPIs\VB\FindFile.vb

Estructura con estructuras anidadas (no simplificada)

Pasa una estructura con una estructura incrustada.

Custom\CS\Structs.cs Custom\VB\Structs.vb

Estructura que contiene el puntero a otra estructura

Pasa una estructura que contiene un puntero a otra estructura como miembro.

Custom\CS\Structs.cs Custom\VB\Structs.vb

Matriz de estructuras que contienen sólo números enteros ByVal

Pasa como parámetro In/Out una matriz de estructuras que sólo contienen enteros.

Custom\CS\Arrays.cs Custom\VB\Arrays.vb

Matriz de estructuras que contienen enteros y cadenas ByRef

Pasa una matriz de estructuras que contienen enteros y cadenas como parámetro Out. El destinatario asigna la memoria para la matriz.

Custom\CS\OutArrayOfStructs.cs Custom\VB\OutArrayOfStructs.vb

Uniones con tipos de valor

Pasa una unión con tipos de valor (entero y doble).

Custom\CS\Unions.cs Custom\VB\Unions.vb

Uniones con tipos mixtos

Pasa una unión con tipos mixtos (entero y cadena).

Custom\CS\Unions.cs Custom\VB\Unions.vb

Cómo calcular las referencias a las matrices

Matriz

Descripción

Código de

Matriz de enteros ByVal

Pasa una matriz de enteros como parámetro In/Out.

Custom\CS\Arrays.cs Custom\VB\Arrays.vb

Matriz de enteros ByRef

Pasa una matriz de enteros como parámetro In/Out. La matriz se puede cambiar de tamaño.

Custom\CS\Arrays.cs Custom\VB\Arrays.vb

Matriz 2D de enteros ByVal

Pasa una matriz de enteros como parámetro In/Out.

Custom\CS\Arrays.cs Custom\VB\Arrays.vb

Varios

Tipo de elemento

Descripción

Código de

HandleRef

Presenta un caso cuando se necesita utilizar HandleRef para impedir la recolección de elementos no utilizados.

WinAPIs\CS\HandleRef.cs WinAPIs\VB\HandleRef.vb

Punteros a función

Pasa un delegado a una función no administrada que espera recibir un puntero a función.

Custom\CS\Callback.cs Custom\VB\Callback.vb

void*

Llama a una función que tiene void* como parámetro.

Custom\CS\Void.cs Custom\VB\Void.vb

LPARAM

Utiliza GCHandle para pasar un objeto administrado a una función no administrada que espera LPARAM.

WinAPIs\CS\GCHandle.cs WinAPIs\VB\GCHandle.vb

Apartamento de un único subproceso (STA) / Apartamento multiproceso (MTA)

Cambia la configuración de apartamento predeterminada cuando una función no administrada llama a CoInitialize.

WinAPIs\CS\ActiveDir.cs WinAPIs\VB\ActiveDir.vb

Para obtener más información sobre la invocación de plataformas, lea los comentarios de los archivos de código fuente.

Vea también

Conceptos

Consumir funciones DLL no administradas

Ejemplos de invocación de plataforma

Referencia

CharSet

DllImportAttribute

LayoutKind

Marshal

MarshalAsAttribute

StructLayoutAttribute

Otros recursos

Comportamiento predeterminado del cálculo de referencias

Calcular referencias de datos con invocación de plataforma