Почему я получаю сообщение «Обнаружен PInvokeStackImbalance» в этом простом примере?

Я создаю очень простой пример PInvoke:

extern "C" __declspec(dllexport) int Add(int a, int b)
{
    return a + b;
}

[DllImport("CommonNativeLib.dll")]
extern public static int Add(int a, int b);

return NativeMethods.Add(a, b);

Но всякий раз, когда я вызываю вышеупомянутый метод NativeMethods.Add , я получаю следующий помощник по управляемой отладке:

Обнаружен PInvokeStackImbalance Сообщение: вызов функции PInvoke «CommonManagedLib! CommonManagedLib.NativeMethods :: Add» разбалансировал стек. Вероятно, это связано с тем, что подпись управляемого PInvoke не соответствует подписи неуправляемого целевого объекта. Убедитесь, что соглашение о вызовах и параметры подписи PInvoke соответствуют целевой неуправляемой подписи.

Затем вызов завершается с ожидаемым возвращаемым значением, но появление сообщения MDA раздражает и тревожит - я еще не полностью понимаю PInvoke , но из того, что я прочитал, я почти уверен, что моя подпись верна - что я делаю не так?

Это все на 32-битной ОС.

22
задан Justin 9 April 2011 в 03:12
поделиться