c# cdecl
и c __ stdcall
причины сосуществования в p/vink
cdecl Calling Convent, в то время как их c -соответствующие функции используют сигнатуру
__ stdcall . Это несоответствие связано с выбором конвенции о вызове, который исторически продолжался по сей день.
]
__ stdcall : функция Caller of Windows очищает
]
__ stdcall наследует от 16-битной конвенции о вызове Паскаля и является соглашением о вызове по умолчанию для функций Windows API и com. В нем указывается, что Callee (вызывающаяся функция) очищает стек после выполнения, что делает его более компактным в условиях, ограниченных ресурсами. Однако, если количество параметров, ожидаемых вызывающим абонентом и Callee, не совпадает, это преимущество представляет риск дисбаланса стека.
]
__ CDECL : Caller Очистка функции изменяемого параметра
]]
__ cdecl - стандартная конвенция о вызове в C для функций с переменным количеством параметров, таких как
printf () и
scanf () . Эта конвенция возлагает ответственность за очистку стека на вызывающего абонента, потому что вызывающий абонент знает, что количество пройденных параметров. Забыл указать
callconvention.cdecl в
[dllimport] ] Объявление в C# является обычной ловушкой.
]
__ thiscall : скрыть этот указатель метода C
]]]
__ thisCall специфически относится к C, который обрабатывает передачу Hidden
this указатели в методе экземпляра класса. Это похоже на
__ CDECL , но .NET P/invoke Marshalling Handler не поддерживает его и, следовательно, не подходит для кода Pinvoke C.
]
Summarize Сосуществование
cdecl вызывает в C# и
__ stdcall подпись в C является результатом этих исторических вызовов и каждой зависимости от требований к конкретному языку. Правильное понимание этих соглашений, а также
intrypoint и
expling свойства
имеют решающее значение для обеспечения правильной функции p/вызовы и избежать потенциальных проблем, таких как дисбаланс стека. ]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3