pInvokeStackImbalance MDA Предупреждение, как это исправить - PullRequest
2 голосов
/ 06 мая 2011

я пытаюсь вызвать это в моем приложении c #

    [DllImport("UOEncryption.dll")]
    public static extern void Decompress([In, Out] byte[] dest, byte[] src, out int dest_size, ref int src_size, ref HuffmanObj obj);

    [DllImport("UOEncryption.dll")]
    public static extern void DecompressClean(ref HuffmanObj obj);

подписи в с

    void Decompress(char *dest, const char *src, int *dest_size, int *src_size, HuffmanObj *obj);
    void DecompressClean(HuffmanObj *obj);

Я не знаю, как это неправильно.

Спасибо

1 Ответ

1 голос
/ 06 мая 2011

Вы забыли свойство CallingConvention в объявлении [DllImport], это Cdecl в вашем случае. По умолчанию используется StdCall, который действительно вызовет предупреждение MDA.

Ключевое слово ref в HuffmanObj тоже выглядит неправильно, если вы объявили его как класс вместо структуры. Попробуйте отладить нативный код, чтобы вы могли посмотреть на значения переданного аргумента и быстро увидеть проблему, подобную этой. Проект + Свойства, вкладка «Отладка», флажок «Включить отладку неуправляемого кода». Установите точку останова в первой строке тела встроенной функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...