возвращаясь к вопросу о конвенциях вызова, то при использовании сишных функций стек должен очищать вызывающий код. в данном случае сам прораммист, если ты используешь push, то где то ниже (после функции) должны быть команды выравнивания стека. иначе он разрастается. cinvoke это делает за тебя