A hívási eljárásokra vonatkozó irányelvek 1

Oldal 1/2

Melyek a különbségek, mikor és mit kell alkalmazni, mi az előnye és hátránya?

A különbség a paraméterek átvitelének módjában és a paraméterek visszaküldésével történik.

stdcall - yuzaetsya (hasonlók) és bor. Az argumentumok átadása jobbról balra. A verem törli a hívott eljárást. Az eredményt visszaadja az EAX (szemetet)

pascal - a win16api-ban használt. Átküldés argumentumokra balról jobbra. A verem törli a hívást. A pascal-ban az eredmény visszaadt al, ax vagy dx: ax értékre. Mint Delphi - nem emlékszem, valószínűleg EAX.

nyilvántartás - átvitel a processzor nyilvántartásain keresztül. Pontosan a fordítótól függ.

cdecl - Nem emlékszem. Ugyanúgy, mint a stdcall, csak a verem tisztítja a hívási eljárást

sdecl - C-stílusú hívások (a C-stílusú híváskonvenciók használatához DLL-ek hívásához). Paraméterek a készletben jobbról balra. Tisztítás - a hívási eljárás. Adjon meg változó számú paraméter karbantartását.

Vingraddal együtt

Ezek az irányelvek a végrehajtási eljáráshívások módszere (i), és a magas szintű nyelvekről történő összeállítás során az adott gépi nyelv paramétereinek átadása (on).

Így például a DOS SI-ban használták a megvalósításukat (általában C-hívást) és a Pascal-t. A win32-ben ezeknek a nyelveknek a megvalósítása is különbözik egymástól, de a végrehajtás töredékének fokozatos kölcsönzése egymástól és szimbiózisuk (stdcall) fokozatos kölcsönzése.

Ha írsz egy nyelven, és ne csatlakoztassa a külső könyvtár által létrehozott másik fordító (egy másik formátumban), akkor elvileg nem érdekel, melyik megvalósítást használják - a fordító a helyes döntés, és megállapodnak szubrutin hívást a saját stílusát. A kivétel talán csak a "regiszterek" opció - azaz azt jelenti, hogy a processzor regiszterek elsőbbséget élveznek az adatok átviteléhez (fogadásához) az eljáráshoz. Ez rendszerint felgyorsítja az eljáráshívást és visszaadja tőle: felhasználható a teljesítmény javítására. Ez azonban általában a projekt globális zászlójának a végleges kiadás létrehozásakor történik, ezt azonnal alkalmazni minden szubrutinra.

Azonban, ha kell csatlakoztatni egy külső könyvtár (pl C-ben írt dll, ami viszont api sql-szerver), akkor meg kell, hogy vegye figyelembe az átadási módja paraméterei az adott könyvtárban.

Vagy, ha kifejezetten hívja az api-t a kódból, akkor figyelembe kell vennie a hívást is (stdcall).

Vingraddal együtt

Kapcsolódó cikkek