Makale numarası: 100832 - Son Gözden Geçirme: 09 Aralık 2005 Cuma - Gözden geçirme: 5.0

32-Bit derleyici destekleyen arama kuralları'nın açıklaması

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Not Microsoft Visual C++ .NET 2002 ve Visual C++ .NET 2003, Microsoft .NET Framework tarafından sağlanan her iki yönetilen kod modeli destekler ve modeli yerel Microsoft Windows yönetilmeyen kod. Bu makaledeki bilgiler yalnızca yönetilmeyen Visual C++ geçerli kod.

Not Microsoft Visual C++ 2005, .NET Framework tarafından sağlanan bir yönetilen kod model hem de yerel Windows kod modeli yönetilmeyen destekler.
Hepsini aç | Hepsini kapa

Özet

Visual C++, 32-bit Edition'ı üç arama kurallarını destekler: <a1>C</a1> (_cdecl), <a1>Standart</a1> (_stdcall) ve <a1>fastcall</a1> (_fastcall). Derleyici MS-DOS ve 16-bit Windows için Microsoft derleyiciler tarafından sağlanan Pascal çağırma kuralı (_pascal) desteklemiyor.

Aşağıdaki tabloda arama kuralları özetler.
                          _cdecl         _stdcall       _fastcall

   -------------------------------------------------------------------
   Arguments              Pushed R to L  Pushed R to L  Note 3
   Stack cleaned up by    Caller         Called         Called
   Naming convention      Prepend "_"    Note 1         Note 2
				
<a1>Not</a1> 1 Çağırma _stdcall her işlev adı (_cdecl kuralı gibi) bir alt çizgi karakteri prepending ve ekleme decorates bir "@" işareti ve gerekli yığın alanı bayt sayısını bir ondalık gösterimi. Her bir bağımsız değişken dört bayt katlarından widened.
<a1>Not</a1> 2 Çağırma _fastcall, her bir işlev adı olarak prepending decorates bir "@" işareti ve ekleme bir işareti ve gerekli yığın alanı bayt sayısını bir ondalık gösterimi. Her bir bağımsız değişken dört bayt katlarından widened.
<a1>Not</a1> 3 Dört veya daha az sayıda bayt gerektirir, ilk iki işlev bağımsız değişkenleri yazmaçların yerleştirilir. Arayanın, sağdan sola, yığının üstüne parametreleri geri kalanı iter. Bu davranış, gelecekteki sürümlerde değişebilir.
Çağırma _cdecl varsayılandır. Uygulama bir işlev bildirir _fastcall veya _stdcall çağrı kuralı ile bağımsız değişken bir dizi kabul eden, o işlev için çağırma _cdecl derleyici kullanır.

Daha fazla bilgi

Aşağıdaki kod örnekleri C çağırma kuralı desteklemek amacıyla çağrılan işlev ve arama işlevini oluşturulan kodunu gösterir.
   int _cdecl CFunc(int a, int b);

      calling function    called function
      -------------------------------------------

      push   b            _CFunc PROC NEAR
      push   a                    .
      call   _CFunc               .
      add    esp,8                .
       .                         RET
       .                  _CFunc ENDP
       .

   int _cdecl CVarFunc(int a, ...);

      calling function    called function
      -------------------------------------------


      push   ...          _CVarFunc PROC NEAR
      push   a                       .
      call   _CVarFunc               .
      add    esp,4+...               .
       .                            RET
       .                  _CVarFunc ENDP
       .
				
Arama işlevi ve çağrılan işlev standart çağırma kuralına desteklemek için oluşturulan kodu aşağıdaki kod örneği gösterilmektedir.
   int _stdcall StdFunc(int a, int b);

      calling function    called function
      -------------------------------------------

      push   b            _StdFunc@8 PROC NEAR
      push   a                        .
      call   _StdFunc@8               .
       .                              .
       .                             RET  8
       .                  _StdFunc@8 ENDP
				
Arama işlevi ve çağrılan işlev çağırma fastcall desteklemek için oluşturulan kodu aşağıdaki kod örneği gösterilmektedir.
   int _fastcall FastFunc(int a, int b);

      calling function    called function
      -------------------------------------------

      mov edx, b          @FastFunc@8 PROC NEAR
      mov ecx, a                       .
      call @FastFunc@8                 .
       .                               .
       .                              RET 8
       .                  @FastFunc@8 ENDP
				

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C++ 1.0 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ 2005 Express Edition
Anahtar Kelimeler: 
kbmt kbhowto kbcompiler kbinfo KB100832 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:100832  (http://support.microsoft.com/kb/100832/en-us/ )