Bunun için iyi bir sebep var mı?Microsoft neden stdcall'ı API sözleşmesi olarak seçti?
İç işlevleri (dışa aktarılmadı) aynı zamanda stdcall kuralı mıdır?
Bunun için iyi bir sebep var mı?Microsoft neden stdcall'ı API sözleşmesi olarak seçti?
İç işlevleri (dışa aktarılmadı) aynı zamanda stdcall kuralı mıdır?
32-bit kod için pascal çağrı kuralı için bir uyarlama oldu. Pascal OS/2 ve Windows 3 gibi 16-bit işletim sistemlerini çağıran bir çağrıydı. Pascal neden seçildi, o zamanlar küçük bir yavru bile olsa, ama biraz daha verimli. Çalışmak zorunda olduğun 640 KB'lık durumun ne olduğu önemliydi. o da ihraç işlevi önce bağlayıcı sunulan dekore edilmiş nasıl reçete olarak
En Win32 fonksiyonları gerçek stdcall değildir. Boş Mumble (int arg) gibi _Mumble @ 4 olur. @ 'Den sonraki sayı, aktivasyon çerçevesi boyutunu tanımlar. Ancak çoğu Win32 işlevi herhangi bir dekorasyona gerek kalmadan dışarı aktarılır. Muhtemelen programcıya GetProcAddress() çalışmasını sağlamak için bir mücadele şansı vermek. Dekorasyonun, bağlayıcıya bildirilen API işlevi imzası ile gerçek olan arasındaki uyumsuzluğu tespit etmesine yardımcı olması gerektiğini düşünüyorum. Geçilen argüman sayısında bir uyumsuzluk olması, otomatik olarak bir kaboomdur, çünkü callee yığından fazla veya daha az argüman gönderir. Tanısı da zor. Stdcall bir zayıflık, cdecl kongre bu sorunu yok.
iç arama stdcall, CDECL ve thiscall arasında karışık bir torbadır. Tek adımlı Windows kodu yapmaktan hoşlandığım bir şey olmamasına rağmen, bir desen tespit ettiğimi söyleyemem. stdcall derlenmiş
sembol dekorasyon eksikliği hiçbir sembol dekorasyon – Necrolis
bulunmadığından, bu, GetProcAddress basit yoluyla ithal yapar winapi ikili (dekorasyon şeritler ve/veya bir ordianl kullanır) ihracat için '.def' dosyalarını kullanabilirsiniz neden olduğu İyi nokta, bence haklısın. –
Kod CDECL (alternatif) ile derlenmiş kod önemli ölçüde daha küçüktür. Karar verildiğinde, daha küçük kod daha hızlı bir koddu.
Aslında Hans Passant'ın cevabını benimkine tercih ettim, ama her neyse. –
Bir Microsoftee iseniz (uzun süre), cevabınızı seçtim. – Benjamin
Bu iddia için herhangi bir kanıtınız var mı? Sezgisel olarak bence stdcall ve cdecl arasında bir yıkama olması gerektiğini düşünüyorum ve googling iki çağrı kuralı arasındaki herhangi bir boyut karşılaştırması ile gelmiyor. –
Microsoft * neden * stdcall API sözleşmesi olarak seçti? – JustBoo
Teşekkür Constantin :) – Benjamin