Пытаясь научиться использовать PInvoke в C #, я немного не уверен, как обрабатывать различные случаи с помощью указателей, использующих простые типы значений.
Я импортирую следующие две функции из неуправляемой DLL:
public int USB4_Initialize(short* device);
public int USB4_GetCount(short device, short encoder, unsigned long* value);
Первая функция использует указатель в качестве входа, вторая - в качестве выхода. Их использование довольно просто в 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
Моя первая попытка в C # приводит к следующему P / вызывает:
[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 # таким же образом, как и код C ++, приведенный выше? Есть ли лучший способ объявить эти типы, возможно, используя MarshalAs
?