C # DllImport com função booleana C ++ não retornando corretamente
Eu tenho a seguinte função em uma DLL C ++
extern "C" __declspec(dllexport) bool Exist(const char* name)
{
//if (g_Queues.find(name) != g_Queues.end())
// return true;
//else
// return false;
return false;
}
Dentro da minha classe C #, tenho o seguinte:
[DllImport("Whisper.dll", EntryPoint="Exist", CallingConvention=CallingConvention.Cdecl)]
public static extern bool Exist(string name);
No entanto, sempre que eu chamo minha função, SEMPRE retorna verdadeiro, mesmo quando eu comentei minha pequena função e fiz com que ela retornasse falsa. Tenho a sensação de que há algo errado com minha convenção de chamada ou qualquer outro problema com P / Invocando minha DLL, provavelmente correspondente à string e const char *, mas, por enquanto, estou completamente sem noção. O que estou fazendo errado? Por que ele retorna verdadeiro em vez de falso?
EDITAR: Eu descobri que isso não tem nada a ver com o const char * ou string, porque o problema persiste com uma função vazia. Tentei alterar a convenção de chamada entre Cdecl e StdCall e nem funcionam corretamente. Também consegui depurar minha DLL e ela está sendo chamada corretamente e realmente retorna false, mas uma vez de volta ao C #, de alguma forma, é verdade. Alterar o CharSet também não teve efeito. Certifiquei-me de fornecer ao meu programa C # a versão mais recente e correta da minha DLL a cada vez, para que isso também não seja um problema. Novamente, sou completamente ignorante sobre por que o resultado é verdadeiro quando, na verdade, estou retornando falso.
EDIT2: O SOReader me forneceu uma sugestão que corrige outra questão importante, veja meu comentário. Infelizmente, ele não corrige o problema de retorno.
EDIT3: Concluí que alterar o tipo de retorno Exist (bool) para (int) repentinamente faz com que ele retorne o número correto (true = 1, false = 0). Isso significaria que pode haver um problema entre o bool do C ++ e o bool do C #. Posso continuar usando um int como um bool, mas isso ainda não explica o problema original. Talvez alguém possa me esclarecer sobre isso? Talvez isso tenha a ver com o fato de eu estar usando x64 (embora ambos os projetos sejam compilados como x86)