Directive privind procedurile de apel 1

Pagina 1 din 2

Care sunt diferențele, când și ce trebuie aplicate, care sunt avantajele și dezavantajele?

Diferența în modul în care parametrii sunt transmise funcției și parametrii sunt returnați din funcție.

stdcall - yuzaetsya (cum ar fi) și vin. Trecerea argumentelor de la dreapta la stânga. Stackul elimină procedura solicitată. Returnează rezultatul la EAX (gunoi)

pascal - folosit în win16api. Transferați la argumentele de la stânga la dreapta. Stiva șterge apelul. În pascal, rezultatul a revenit la al, ax sau dx: ax. Ca și în Delphi - nu-mi amintesc, probabil EAX.

înregistrare - transfer prin toate registrele procesorului. Cât de exact depinde de compilator.

cdecl - Nu-mi amintesc. Ca și stdcall, doar stiva curăță procedura de apelare

sdecl - provocări în stilul C (pentru a se referi la DLL folosind convențiile de apel în stilul C). Parametrii din setul de la dreapta la stânga. Curățarea - procedura de apelare. Asigurați menținerea unui număr variabil de parametri.

Luat cu Vingrad

Aceste directive se referă la metoda (metodele) aplicării procedurilor de implementare și la trecerea parametrilor dintr-o anumită limbă a mașinii atunci când sunt compilate din limbi de nivel înalt.

Deci, de exemplu, în DOS SI au folosit tipurile de implementări (denumite de obicei C-call) și Pascal - propriile lor. In win32 asemenea implementări pentru aceste limbi, dar apare împrumutând treptat fragmente implementări de la alții și symbioses lor (stdcall).

Dacă scrieți într-o singură limbă, și nu conectați la o bibliotecă externă creată de un alt compilator (într-un format diferit), atunci va fi, în principiu, nu-mi pasă care punerea în aplicare este utilizat - compilatorul va lua decizia corectă și sunt de acord solicită subrutine din propriul său stil. Excepția, probabil, este doar opțional „registre“ - în sensul că înseamnă utilizarea prioritară a registrelor procesorului pentru transmiterea (primirea) Procedura de date. De regulă, acest lucru accelerează apelul procedurii și returnează: poate fi folosit pentru a îmbunătăți performanța. Cu toate acestea, acest lucru se face de obicei prin stabilirea proiectului global de pavilion în momentul creării Faynal lansării, prin aplicarea imediat tuturor subrutine.

Cu toate acestea, în cazul în care aveți nevoie pentru a conecta o bibliotecă externă (de exemplu, scris în C dll, provocând la rândul său, api sql-server), va trebui să ia în considerare modul de transfer al parametrilor acestei biblioteci particulare.

Sau când apel explicit de la codul de câștig api, de asemenea, necesar să se ia în considerare modul în care numesc (stdcall).

Luat cu Vingrad

Articole similare