En un intento de aprender a utilizar PInvoke en C#, no estoy seguro de cómo manejar varios casos con punteros que involucran tipos de valores simples.Cómo invocar cuando hay punteros involucrados
estoy importando los siguientes dos funciones de un archivo DLL no administrado:
public int USB4_Initialize(short* device);
public int USB4_GetCount(short device, short encoder, unsigned long* value);
La primera función utiliza el puntero como una entrada, la segunda como una salida. Su uso es bastante simple en C++:
// Pointer as an input
short device = 0; // Always using device 0.
USB4_Initialize(&device);
// Pointer as an output
unsigned long count;
USB4_GetCount(0,0,&count); // count is output
Mi primer intento en C# los resultados en la siguiente P/Invoca:
[DllImport("USB4.dll")]
public static extern int USB4_Initialize(IntPtr deviceCount); //short*
[DllImport("USB4.dll")]
public static extern int USB4_GetCount(short deviceNumber, short encoder, IntPtr value); //ulong*
¿Cómo se utilizan estas funciones en C# en la misma forma que el C++ código de arriba? ¿Existe alguna forma mejor de declarar estos tipos, quizás usando MarshalAs
?
Hey, USB 4 ya? Todavía estoy esperando 3.0 –
Ojalá. No tiene nada que ver con USB4. Este es solo un dispositivo USB que la compañía tiene para conectarse a un codificador, y dado que es la 4ª revisión de su producto, estúpidamente llamaron al producto USB4. –