Todos os parâmetros P/Invoke e tipos de retorno boolianos devem ser marcados explicitamente com o atributo MarshalAs. Por ...

Todos os parâmetros P/Invoke e tipos de retorno boolianos devem ser marcados explicitamente com o atributo MarshalAs. Por padrão, o sistema realizará o marshaling de todos os boolianos como UnmanagedType.Bool de 4 bytes. Esse é o comportamento correto para argumentos "BOOL" do Win32, mas incorreto para argumentos "bool" do C++, que devem ter o marshaling como UnmanagedType.U1 de 1 byte. Por motivos de capacidade de manutenção de código, especifique explicitamente as informações de marshaling para argumentos boolianos e valores de retorno.