2011-03-30 19 views
5

Tengo una DLL no administrada con una función que toma un puntero como argumento. ¿Cómo paso un puntero desde C# sin ser "inseguro"?¿Cómo puedo pasar un puntero desde C# a una DLL no administrada?

Aquí hay un código de ejemplo:

[DllImport(@"Bird.dll")] 
private static extern bool foo(ushort *comport); 

La entrada correspondiente en el encabezado:

BOOL DLLEXPORT foo(WORD *pwComport); 

Cuando intento y simplemente eliminar la referencia (&comport), me sale un error que dice: "Punteros y los búferes de tamaño fijo solo se pueden usar en un contexto inseguro. "

¿Cómo puedo solucionar esto?

Respuesta

13

Uso ref:

[DllImport(@"Bird.dll")] 
private static extern bool foo(ref ushort comport); 

de llamadas que de este modo:

ushort comport; 
foo(ref comport); 

Por interoperabilidad como esto, yo prefiero usar UInt16 en lugar de ushort como el equivalente a WORD.

+0

¡Oh, hombre, eso es simple! –

Cuestiones relacionadas