Вопрос

Есть ли хорошая причина?

Их внутренние функции (не экспортированы) также Конвенция STDCALL?

Это было полезно?

Решение

Это была адаптация к Конвенции о призывах Паскаля для 32-битного кода. Паскаль была призванной конвенцией для 16-битных операционных систем, таких как OS / 2 и Windows 3. Почему Pascal был выбран, немного догадается, даже я был маленьким щенком, но это немного более эффективно. Что имело значение обратно, когда 640 КБ было все, с которым вы должны были работать.

Большинство функций Win32 не являются True STDCALL, так как он также предписывает, как экспортируемая функция украшена до представления линкера. Как Void Mumble (INT ARG) становится _mumble @ 4. Номер после @ описывает размер рамы активации. Но большинство функций Win32 экспортируются без каких-либо украшений. Вероятно, дать программисту боевой шанс сделать работу GetProcaddress (). Я думаю, что украшение было предназначено для того, чтобы помочь линкеру определить несоответствия между заявленной подписью функции API и фактической. Имея несоответствие в количестве прошлых аргументов, является автоматическим каболом, поскольку Callee будет производить более или менее аргументы от стека, затем пройдены. Трудно тоже диагностировать. Слабость STDCALL Конвенция CDECL не имеет этой проблемы.

Внутренняя вызов - это смешанная сумка между STDCALL, CDECL и ISCall. Не могу сказать, что я когда-либо обнаружил шаблон, хотя один ступенчатый код Windows - это не то, что мне нравится делать.

Другие советы

Код скомпилирован STDCALL, значительно меньше, чем код, составленный CDECL (альтернативой). В то время принято решение, меньший код был более быстрым кодом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top