Todos los parámetros P/Invoke booleanos y tipos de valor devuelto deben estar marcados explícitamente con el atributo MarshalAs. ...

Todos los parámetros P/Invoke booleanos y tipos de valor devuelto deben estar marcados explícitamente con el atributo MarshalAs. De forma predeterminada, el sistema calculará las referencias de todos los booleanos como UnmanagedType.Bool de 4 bytes. Éste es el comportamiento correcto para argumentos 'BOOL' de Win32 pero incorrecto para los argumentos 'bool' de C++ , cuyas referencias se deben calcular como UnmanagedType.U1 de 1 byte. Por razones de mantenimiento de código, especifique explícitamente la información de cálculo de referencias para argumentos booleanos y valores de devueltos.