C # DllImport с логической функцией C ++ не возвращается правильно

У меня есть следующая функция в C ++ DLL

extern "C" __declspec(dllexport) bool Exist(const char* name)
{
 //if (g_Queues.find(name) != g_Queues.end())
 // return true;
 //else
 // return false;
 return false;
}

В моем классе C # у меня есть следующее:

[DllImport("Whisper.dll", EntryPoint="Exist", CallingConvention=CallingConvention.Cdecl)]
        public static extern bool Exist(string name);

Тем не менее, всякий раз, когда я вызываю свою функцию, она ВСЕГДА возвращает истину, даже когда я закомментировал свою маленькую функцию и заставил его вернуть false. У меня такое чувство, что что-то не так с моим соглашением о вызовах или любая другая проблема с P / Invoking моей DLL, вероятно, соответствующая строке и const char *, но пока я совершенно невежественен. Что я делаю неправильно? Почему он возвращает true вместо false?

EDIT: Я понял, что это не имеет ничего общего с const char * или строкой, потому что проблема сохраняется с пустой функцией. Я пробовал изменить соглашение о вызовах между Cdecl и StdCall, и ни одна из них не работает правильно. Я' Мне также удалось отладить мою DLL, и она вызывается правильно и действительно возвращает false, но после возвращения в C # это почему-то верно. Изменение CharSet также не повлияло. Я удостоверился, что каждый раз снабдил свою программу C # последней и правильной версией моей DLL, так что это тоже не должно быть проблемой. Опять же, я совершенно не понимаю, почему результат верен, когда на самом деле я возвращаю false.

EDIT2: SOReader предоставил мне предложение, которое исправляет еще одну важную проблему, см. Мой комментарий. К сожалению, это не решает проблему возврата.

EDIT3: Я пришел к выводу, что изменение типа возвращаемого значения Exist (bool) на (int) внезапно заставляет возвращать правильное число (true = 1, false = 0 ). Это означало бы, что может быть проблема между bool в C ++ и bool в C #. Я могу продолжать использовать int как bool, но это все равно не объясняет исходную проблему. Может быть, кто-нибудь еще может просветить меня по этому поводу? Возможно, это связано с тем, что я использую x64 (хотя оба проекта скомпилированы как x86)

29
задан Shammah 6 January 2011 в 14:08
поделиться