Bu, Win32 API'sinin geri arama işlevleri hakkında varsaydığı şey olduğu için __stdcall
olarak tanımlanmıştır. Bu bir çağrı kuralı - fonksiyon çağrısının düşük seviyede nasıl düzenlendiğini açıklar - CPU yığınında parametreler nasıl düzenlenir ve benzerleri. Beklenen yığın düzeni (yani kongre) hakkındaki varsayımlar, arayan kişi ile aranan kişi arasında eşleşmelidir, aksi takdirde her türlü eğlenceli sonuç ortaya çıkabilir.
Geçmişte, Intel işlemcilerde birden çok sözleşme vardı; Microsoft olmayan derleyicileri sayıyorsanız daha da fazla. Geri aramalarınızın __stdcall olduğundan emin olmak iyi bir uygulamadır. Bazı durumlarda, derleyici ve ayarlara bağlı olarak, __stdcall varsayılan çağrı kuralıdır (yani, CALLBACK'ı güvenle atlayabilirsiniz), ancak her zaman değil.
Win16'da, CALLBACK far pascal
olarak tanımlandı. Bu, özellikle C programında, kullanıcı fonksiyonları için varsayılan değer olarak daha az olasıdır. Geri çağırmaların bir Pascal çağrı sözleşmesine sahip olduğu varsayımı, tarihi bir eserdi.
_stdcall tam olarak nedir? LRESULT dönüş tipi, _stdclall nedir? Deklerasyonda hangi pozisyonda yer alıyor? Ve biraz basitleştirebilirsin - ne için geri çağırıyor? – Ghost
__stdcall, [çağrı sözleşmesi] 'ni (http://en.wikipedia.org/wiki/Calling_convention) mümkün olan en çok şeyden biri olarak gösterir. Geri arama, API'nin işlevini tersi yerine çağırdığı bir tekniktir. Bunu doğru şekilde yapmak için API'nın, işlevin izlediği çağrı kuralını bilmesi gerekir. –
Arama kuralını nasıl değiştirebiliriz? Ve winproc işlevi de bir şekilde konvansiyonu takip ediyor mu (mantıklı değil mi, becoz hangi kuralları izleyeceğimizi pencerelere söylüyoruz, bu da winproc'un sözleşmeye bağlı olduğu anlamına geliyor)? Soru dizisi için üzgünüm, tamamen memnun değilim. – Ghost