Я пытаюсь использовать функциональные возможности взаимодействия, чтобы создать .net-оболочку для написанной библиотеки pigpio. Однако я, кажется, застрял со следующей ошибкой:
" Cannot marshal 'параметр # 2': подпись не совместима с Interop ". Метод C имеет следующую подпись:
int gpioWaveAddGeneric(unsigned numPulses, gpioPulse_t *pulses);
где gpioPulse_t:
typedef struct
{
uint32_t gpioOn;
uint32_t gpioOff;
uint32_t usDelay;
} gpioPulse_t;
Я предполагал, что это будет подпись для вызова класса:
[DllImport(Constants.PiGpioLibrary, CallingConvention = CallingConvention.Cdecl, EntryPoint = "gpioWaveAddGeneric")]
public static extern int GpioWaveAddGeneric(uint numPulses, [In, MarshalAs(UnmanagedType.LPArray)] GpioPulse[] pulses);
где GpioPulse [] равен
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class GpioPulse
{
private BitMask m_GpioOn;
private BitMask m_GpioOff;
private uint m_DelayMicroseconds;
public BitMask GpioOn { get => m_GpioOn; set => m_GpioOn = value; }
public BitMask GpioOff { get => m_GpioOff; set => m_GpioOff = value; }
public uint DurationMicroSecs { get => m_DelayMicroseconds; set => m_DelayMicroseconds = value; }
}
и BitMask:
[Flags]
public enum BitMask : uint
{
None = 0x00000000,
All = 0xFFFFFFFF,
Bit00 = 0x00000001,
Bit01 = 0x00000002,
Bit02 = 0x00000004,
Bit03 = 0x00000008,
}
Есть идеи, что я делаю не так?