๐ฎ GAME & DEV/ํ๋ก๊ทธ๋๋ฐ
ํธ์ถ ๊ท์ฝ
Blue Sky!
2008. 6. 13. 12:13
__fastcall์ C++๋น๋ ํ๋ก๊ทธ๋จ์ ํ๋ค๋ณด๋ฉด ์์ฃผ ๋ง์ด ์ ํ๊ฒ ๋๋ ํค์๋๋ค.
__fastcall์ Calling Convention ์ฝ๋ง ์ปจ๋ฒค์ ์ ์ผ์ข ์ด๋ค.
์ฝ๋ง ์ปจ๋ฒค์ ์ ํจ์๋ฅผ ๋ถ๋ฅผ๋ ์ด๋ป๊ฒ ํ๋ผ๋ฉํฐ๋ฅผ ๊ฑด๋ค๊ณ ์คํ์ ์ ๋ฆฌํ ์ง์ ๊ดํด ์ด์ ๋ธ๋ฆฌ ์์ค์์์ ์ฒ๋ฆฌ๋ฅผ ๊ท์ ํ๋ ๊ฒ์ผ๋ก, ๊ณง ํจ์ ํธ์ถ๊ท์ฝ ๋๋ ํธ์ถ๊ท์ ์ด๋ผ๊ณ ํ๋ค.
ํธ์ถ๊ท์ฝ์ ํต์ฌ์ ํจ์ ํ๋ผ๋ฉํฐ๋ฅผ ์คํ์ ์ผ์ชฝ(์)๋ถํฐ ๋ฃ์ ๊ฒ์ธ๊ฐ ์ค๋ฅธ์ชฝ(๋ง์ง๋ง)๋ถํฐ ๋ฃ์ ๊ฒ์ด๊ฐ ํ๋ ๊ฒํ๊ณ , ์คํ์ ํธ์ถํ ์ชฝ์์ ํด์ ํ ๊ฒ์ธ๊ฐ ํธ์ถ๋ ํจ์๊ฐ ํด์ ํ ๊ฒ์ธ๊ฐ ํ๋ ๊ฒ์ด๋ค. ํจ์ ๋ฆฌํด ๊ฐ์ ๊ฒฝ์ฐ๋ ๋๋ถ๋ถ ๋ ์ง์คํฐ๋ฅผ ํตํด ๊ฑด๋ค์ง๋๋ฐ ์ฃผ๋ก EAX ๋ ์ง์คํฐ๋ฅผ ์ด์ฉํ๋ค.
ํธ์ถ๊ท์ฝ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค.
* __cdecl :
์ ํต์ ์ธ C ์คํ์ผ์ ํธ์ถ๊ท์ ์ผ๋ก ํ๋ผ๋ฉํฐ๋ฅผ ์คํ์ ๋ฃ์ด ์ ๋ฌํ ๋ ๋ค์ ๊ฒ๋ถํฐ ๋จผ์ ๋ฃ๊ณ , ๋ฐ์๋๋ ๋ ์ง์คํธ๋ฅผ ํตํด return ๊ฐ์ ๋ฐ์ผ๋ฉฐ, ํธ์ถํ ํจ์๊ฐ ์คํ์ ํด์ ํ๋ค. ํด์ ํ๋ค๋ผ๋ ํํ์ธ์ ์ ๋ฆฌํ๋ค๋ผ๋ ํํ์ ์ฐ๊ธฐ๋ ํ๋๋ฐ ์คํ์์ ํ๋ผ๋ฉํฐ๋ฅผ ๋ชจ๋ ๋ฒ๋ฆฌ๋ ์์ ์ ๋ปํ๋ค.
C ์์ ์๋ ํธ์ถ๊ท์ฝ์ด ํ๋ ๋ฟ์ด์์ผ๋ฏ๋ก ์ด ํค์๋๊ฐ ํ์์์๋ค. ์๋ ์ฝ๋ง ์ปจ๋ฒค์ ํค์๋ ์์ฒด๊ฐ ์์๋ค.
C ํ์์ ํจ์๊ฐ ํ์ํ ๋๋ ๋ฐ๋์ ๋ถ์ฌ์ผ ํ๋ค.
* __stdcall :
OS๊ฐ ์๋๋ก ๋ฐ๋๋ฉด์ ๋๋ถ๋ถ์ API ํจ์์ ์ ์ฉ๋ ํธ์ถ๊ท์ฝ์ด๋ค. ํ๋ผ๋ฉํฐ๋ ์ค๋ฅธ์ชฝ๋ถํฐ ์คํ์ ๋ค์ด๊ฐ๋ค. ์คํ์ ํธ์ถ ๋ฐ์ ํจ์๊ฐ ํด์ ํ๋ค.
๊ทธ๋ฐ๋ฐ, ์์ธ์ ์ผ๋ก wsprintf ํจ์ ๊ฐ์ด ๊ฐ๋ณ ํ๋ผ๋ฉํฐ๋ฅผ ์ฐ๋ ํจ์์ ๊ฒฝ์ฐ๋ ํ์ค์นผ์ ํธ์ถ์ ์๋๊ณ , ์ ํต์ ์ธ C ํ์์ ํธ์ถ์ ์ฌ์ฉํ๋ค.
* __fastcall :
์ ํต์ ์ผ๋ก ํ์ค์นผ์์ ์ฌ์ฉํ๋ ํธ์ถ๊ท์ฝ์ ์ข ๋ ๋น ๋ฅธ ์๋๋ฅผ ๋ด๋๋ก ๊ฐ์ ํ ๊ฒ์ด๋ค. ์ผ๋ช Register calling convention ๋ ์ง์คํฐ ์ฝ๋ง ์ปจ๋ฒค์ ์ด๋ผ๊ณ ๋ ํ๋๋ฐ, ์ฒ์ 2๊ฐ์ ์ธ์๋ ๊ฐ๊ฐ ECX, EDX ๋ ์ง์คํฐ์ ๋ด๊ณ 3๋ฒ์งธ ๋ถํฐ๋ ์คํ์ ๋ฃ๋๋ฐ, ๋ฃ๋ ์์๋ ์ค๋ฅธ์ชฝ์ ๊ฒ์ ๋จผ์ ๋ฃ๋๋ค. ์คํ ํด์ ๋ ํธ์ถ ๋ฐ์ ํจ์ ์ชฝ์์ ๋ด๋นํ๋ค. ๋ ์ง์คํฐ๋ฅผ ์ด์ฉํ๋ฏ๋ก ์คํ์ ์ด์ฉํ๋ ๊ฒฝ์ฐ๋ณด๋ค ํจ์ฌ ์ฝ๋๋ ์งง๊ณ ์๋๋ ๋น ๋ฅด๋ค.
์ด๋ฆ ๊ทธ๋๋ก ๊ฐ์ฅ ๋น ๋ฅธ ํธ์ถ ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋, ์ด๊ณ ์ ๊ทธ๋ํฝ ๋ฑ ๊ทนํ์ ์คํผ๋๋ฅผ ์๊ตฌํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฑ ์ธ์๋ __fastcall๋ก ์ป์ ์ ์๋ ์๋ ์ด๋์ ๊ทนํ ๋ฏธ๋ฏธํ๋ค. ํ์ง๋ง ๋น๋ฒํ ํธ์ถ๋๋ ํจ์๋ผ๋ฉด ์๋ ์ด๋์ด ์๋ค๊ณ ํ ์ ์์ผ๋ฉฐ ์ ์ฌ์ฉํ๋ฉด ์ต์ ์ ์๋๋ฅผ ๋ด๋ ํ๋ก๊ทธ๋๋ฐ์ ์ ๋ฆฌํ๋ค.
์ฐธ๊ณ ์ ์ผ๋ก, Windows NT/200x ์ปค๋ ๋ชจ๋ ๋๋ผ์ด๋ฒ์์๋ ๋ ์ด์ ๋ ์ง์คํฐ๋ฅผ ์ด์ฉํ ํธ์ถ๊ท์ฝ์ ์ฌ์ฉํ์ง ์๋๋ฐ, ์ด์ ๋ ๋ ์ง์คํฐ๋ CPU์ ์ข ์์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ __fastcall์ด ๋ง์ด ์ฐ์ด๋๊ฐ?
๊ทธ๊ฒ์ ๊ฐ์ฅ ๋น ๋ฅธ ํธ์ถ๊ท์ฝ์ด๊ธฐ ๋๋ฌธ์ด๋ฉฐ, ๋ธํ์ด๊ฐ ์ด ํธ์ถ๊ท์ฝ์ ์ฌ์ฉํ๋๋ฐ ๋ธํ์ด๋ก ์ ์๋ VCL๋ฅผ C++๋น๋๋ ๊ฐ์ด ์ด์ฉํ๊ธฐ ๋๋ฌธ์ __fastcall ์ ๋ง์ด ๋ณผ์ ๋ฐ์ ์๋ค.
* ๊ธฐํ
__declspec(naked)์ด๋ผ๋ ํน์ดํ ๊ท์ฝ๋ ์๊ณ __pascal, __fortran, __syscall๋ก ์ ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ์ฌ์ฅ๋ ํธ์ถ๊ท์ฝ๋ ์๋๋ฐ, ์ค๋ฌด์์๋ ๊ฑฐ์ ๋ณผ์ผ์ด ์๋ค.
ํธ์ถ ๊ท์ฝ์ ๋ํ ๋ณด๋ค ๊น์ ์ดํด๋ฅผ ์ํด์๋ ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ์์์ผ ํ๋ค. ๊ทธ๋ฌ๋ ์ด์์ ์ค๋ช ๋ง์ผ๋ก๋ ๊ณ ๊ธ C++ ํ๋ก๊ทธ๋๋ฐ์ ์ถฉ๋ถํ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ํ์๊ฐ ์์ ๋ก ๋ณด์ด๋ ํด๋์ค๋ ํจ์์์๋ __fastcall ์ด ๋ณ๋ก ์๋ค. ์์ผ๊น? ์ด๊ฑด ๊ทธ๋ฅ ํ์ดํ์ด ๊ท์์์์ด๋ค. ๋ค๋ฅธ ์๋ฌด๋ฐ ์ด์ ๊ฐ ์๋ค. ๋ฌผ๋ก ๋จ์ถํค๋ฅผ ์จ์ ํ๋ฒ์ ์ ๋ ฅํ ์ ์์ง๋ง ๊ทธ๊ฒ๋ ๊ท์๊ณ ํด์, ๊ผญ ํ์ํ ๊ฒฝ์ฐ๋ง ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ , VCL ํ๋ก๊ทธ๋๋ฐ์ ์ํด ๋ฐ๋์ ์์์ผ ํ๋ ๊ฒ์, VCL ํจ์๋ ๊ฑฐ์ __fastcall ๊ท์ฝ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ VCL ํด๋์ค๋ฅผ ์์ํ ๋๋ ์์ฑ์ ์๋ฉธ์๋ ๋ฌผ๋ก ์ด๊ณ ์์ํ๋ ๋ฉค๋ฒ ํจ์์๋ __fastcall๋ฅผ ๋ถ์ฌ ์ฃผ์ด์ผ ํ๋ค๋ ์ ์ด๋ค. ์์ ์ด ์๋ก ๋ง๋๋ ํจ์์๋ ํธ์ถ๊ท์ฝ์ ์๊ธฐ ๋ง์๋๋ก ๊ฒฐ์ ํ ์ ์๋ค.
์ง๋ฌธ : ๋ง์ด ๋ณด๋ CALLBACK ์ด๋ WINAPI ๋ฑ์ ํธ์ถ๊ท์ฝ์ ์ค์ฒด๋ ๋ญ๊ฐ?
๋ต๋ณ : ์๋ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์๋ฌธ์ด ์๋์ผ๋ก ํ๋ฆด ๊ฒ์ด๋ค.
//---- windef.h ํค๋ํ์ผ
#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
__fastcall์ Calling Convention ์ฝ๋ง ์ปจ๋ฒค์ ์ ์ผ์ข ์ด๋ค.
์ฝ๋ง ์ปจ๋ฒค์ ์ ํจ์๋ฅผ ๋ถ๋ฅผ๋ ์ด๋ป๊ฒ ํ๋ผ๋ฉํฐ๋ฅผ ๊ฑด๋ค๊ณ ์คํ์ ์ ๋ฆฌํ ์ง์ ๊ดํด ์ด์ ๋ธ๋ฆฌ ์์ค์์์ ์ฒ๋ฆฌ๋ฅผ ๊ท์ ํ๋ ๊ฒ์ผ๋ก, ๊ณง ํจ์ ํธ์ถ๊ท์ฝ ๋๋ ํธ์ถ๊ท์ ์ด๋ผ๊ณ ํ๋ค.
ํธ์ถ๊ท์ฝ์ ํต์ฌ์ ํจ์ ํ๋ผ๋ฉํฐ๋ฅผ ์คํ์ ์ผ์ชฝ(์)๋ถํฐ ๋ฃ์ ๊ฒ์ธ๊ฐ ์ค๋ฅธ์ชฝ(๋ง์ง๋ง)๋ถํฐ ๋ฃ์ ๊ฒ์ด๊ฐ ํ๋ ๊ฒํ๊ณ , ์คํ์ ํธ์ถํ ์ชฝ์์ ํด์ ํ ๊ฒ์ธ๊ฐ ํธ์ถ๋ ํจ์๊ฐ ํด์ ํ ๊ฒ์ธ๊ฐ ํ๋ ๊ฒ์ด๋ค. ํจ์ ๋ฆฌํด ๊ฐ์ ๊ฒฝ์ฐ๋ ๋๋ถ๋ถ ๋ ์ง์คํฐ๋ฅผ ํตํด ๊ฑด๋ค์ง๋๋ฐ ์ฃผ๋ก EAX ๋ ์ง์คํฐ๋ฅผ ์ด์ฉํ๋ค.
ํธ์ถ๊ท์ฝ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค.
* __cdecl :
์ ํต์ ์ธ C ์คํ์ผ์ ํธ์ถ๊ท์ ์ผ๋ก ํ๋ผ๋ฉํฐ๋ฅผ ์คํ์ ๋ฃ์ด ์ ๋ฌํ ๋ ๋ค์ ๊ฒ๋ถํฐ ๋จผ์ ๋ฃ๊ณ , ๋ฐ์๋๋ ๋ ์ง์คํธ๋ฅผ ํตํด return ๊ฐ์ ๋ฐ์ผ๋ฉฐ, ํธ์ถํ ํจ์๊ฐ ์คํ์ ํด์ ํ๋ค. ํด์ ํ๋ค๋ผ๋ ํํ์ธ์ ์ ๋ฆฌํ๋ค๋ผ๋ ํํ์ ์ฐ๊ธฐ๋ ํ๋๋ฐ ์คํ์์ ํ๋ผ๋ฉํฐ๋ฅผ ๋ชจ๋ ๋ฒ๋ฆฌ๋ ์์ ์ ๋ปํ๋ค.
C ์์ ์๋ ํธ์ถ๊ท์ฝ์ด ํ๋ ๋ฟ์ด์์ผ๋ฏ๋ก ์ด ํค์๋๊ฐ ํ์์์๋ค. ์๋ ์ฝ๋ง ์ปจ๋ฒค์ ํค์๋ ์์ฒด๊ฐ ์์๋ค.
C ํ์์ ํจ์๊ฐ ํ์ํ ๋๋ ๋ฐ๋์ ๋ถ์ฌ์ผ ํ๋ค.
* __stdcall :
OS๊ฐ ์๋๋ก ๋ฐ๋๋ฉด์ ๋๋ถ๋ถ์ API ํจ์์ ์ ์ฉ๋ ํธ์ถ๊ท์ฝ์ด๋ค. ํ๋ผ๋ฉํฐ๋ ์ค๋ฅธ์ชฝ๋ถํฐ ์คํ์ ๋ค์ด๊ฐ๋ค. ์คํ์ ํธ์ถ ๋ฐ์ ํจ์๊ฐ ํด์ ํ๋ค.
๊ทธ๋ฐ๋ฐ, ์์ธ์ ์ผ๋ก wsprintf ํจ์ ๊ฐ์ด ๊ฐ๋ณ ํ๋ผ๋ฉํฐ๋ฅผ ์ฐ๋ ํจ์์ ๊ฒฝ์ฐ๋ ํ์ค์นผ์ ํธ์ถ์ ์๋๊ณ , ์ ํต์ ์ธ C ํ์์ ํธ์ถ์ ์ฌ์ฉํ๋ค.
* __fastcall :
์ ํต์ ์ผ๋ก ํ์ค์นผ์์ ์ฌ์ฉํ๋ ํธ์ถ๊ท์ฝ์ ์ข ๋ ๋น ๋ฅธ ์๋๋ฅผ ๋ด๋๋ก ๊ฐ์ ํ ๊ฒ์ด๋ค. ์ผ๋ช Register calling convention ๋ ์ง์คํฐ ์ฝ๋ง ์ปจ๋ฒค์ ์ด๋ผ๊ณ ๋ ํ๋๋ฐ, ์ฒ์ 2๊ฐ์ ์ธ์๋ ๊ฐ๊ฐ ECX, EDX ๋ ์ง์คํฐ์ ๋ด๊ณ 3๋ฒ์งธ ๋ถํฐ๋ ์คํ์ ๋ฃ๋๋ฐ, ๋ฃ๋ ์์๋ ์ค๋ฅธ์ชฝ์ ๊ฒ์ ๋จผ์ ๋ฃ๋๋ค. ์คํ ํด์ ๋ ํธ์ถ ๋ฐ์ ํจ์ ์ชฝ์์ ๋ด๋นํ๋ค. ๋ ์ง์คํฐ๋ฅผ ์ด์ฉํ๋ฏ๋ก ์คํ์ ์ด์ฉํ๋ ๊ฒฝ์ฐ๋ณด๋ค ํจ์ฌ ์ฝ๋๋ ์งง๊ณ ์๋๋ ๋น ๋ฅด๋ค.
์ด๋ฆ ๊ทธ๋๋ก ๊ฐ์ฅ ๋น ๋ฅธ ํธ์ถ ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋, ์ด๊ณ ์ ๊ทธ๋ํฝ ๋ฑ ๊ทนํ์ ์คํผ๋๋ฅผ ์๊ตฌํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฑ ์ธ์๋ __fastcall๋ก ์ป์ ์ ์๋ ์๋ ์ด๋์ ๊ทนํ ๋ฏธ๋ฏธํ๋ค. ํ์ง๋ง ๋น๋ฒํ ํธ์ถ๋๋ ํจ์๋ผ๋ฉด ์๋ ์ด๋์ด ์๋ค๊ณ ํ ์ ์์ผ๋ฉฐ ์ ์ฌ์ฉํ๋ฉด ์ต์ ์ ์๋๋ฅผ ๋ด๋ ํ๋ก๊ทธ๋๋ฐ์ ์ ๋ฆฌํ๋ค.
์ฐธ๊ณ ์ ์ผ๋ก, Windows NT/200x ์ปค๋ ๋ชจ๋ ๋๋ผ์ด๋ฒ์์๋ ๋ ์ด์ ๋ ์ง์คํฐ๋ฅผ ์ด์ฉํ ํธ์ถ๊ท์ฝ์ ์ฌ์ฉํ์ง ์๋๋ฐ, ์ด์ ๋ ๋ ์ง์คํฐ๋ CPU์ ์ข ์์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ __fastcall์ด ๋ง์ด ์ฐ์ด๋๊ฐ?
๊ทธ๊ฒ์ ๊ฐ์ฅ ๋น ๋ฅธ ํธ์ถ๊ท์ฝ์ด๊ธฐ ๋๋ฌธ์ด๋ฉฐ, ๋ธํ์ด๊ฐ ์ด ํธ์ถ๊ท์ฝ์ ์ฌ์ฉํ๋๋ฐ ๋ธํ์ด๋ก ์ ์๋ VCL๋ฅผ C++๋น๋๋ ๊ฐ์ด ์ด์ฉํ๊ธฐ ๋๋ฌธ์ __fastcall ์ ๋ง์ด ๋ณผ์ ๋ฐ์ ์๋ค.
* ๊ธฐํ
__declspec(naked)์ด๋ผ๋ ํน์ดํ ๊ท์ฝ๋ ์๊ณ __pascal, __fortran, __syscall๋ก ์ ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ์ฌ์ฅ๋ ํธ์ถ๊ท์ฝ๋ ์๋๋ฐ, ์ค๋ฌด์์๋ ๊ฑฐ์ ๋ณผ์ผ์ด ์๋ค.
ํธ์ถ ๊ท์ฝ์ ๋ํ ๋ณด๋ค ๊น์ ์ดํด๋ฅผ ์ํด์๋ ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ์์์ผ ํ๋ค. ๊ทธ๋ฌ๋ ์ด์์ ์ค๋ช ๋ง์ผ๋ก๋ ๊ณ ๊ธ C++ ํ๋ก๊ทธ๋๋ฐ์ ์ถฉ๋ถํ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ํ์๊ฐ ์์ ๋ก ๋ณด์ด๋ ํด๋์ค๋ ํจ์์์๋ __fastcall ์ด ๋ณ๋ก ์๋ค. ์์ผ๊น? ์ด๊ฑด ๊ทธ๋ฅ ํ์ดํ์ด ๊ท์์์์ด๋ค. ๋ค๋ฅธ ์๋ฌด๋ฐ ์ด์ ๊ฐ ์๋ค. ๋ฌผ๋ก ๋จ์ถํค๋ฅผ ์จ์ ํ๋ฒ์ ์ ๋ ฅํ ์ ์์ง๋ง ๊ทธ๊ฒ๋ ๊ท์๊ณ ํด์, ๊ผญ ํ์ํ ๊ฒฝ์ฐ๋ง ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ , VCL ํ๋ก๊ทธ๋๋ฐ์ ์ํด ๋ฐ๋์ ์์์ผ ํ๋ ๊ฒ์, VCL ํจ์๋ ๊ฑฐ์ __fastcall ๊ท์ฝ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ VCL ํด๋์ค๋ฅผ ์์ํ ๋๋ ์์ฑ์ ์๋ฉธ์๋ ๋ฌผ๋ก ์ด๊ณ ์์ํ๋ ๋ฉค๋ฒ ํจ์์๋ __fastcall๋ฅผ ๋ถ์ฌ ์ฃผ์ด์ผ ํ๋ค๋ ์ ์ด๋ค. ์์ ์ด ์๋ก ๋ง๋๋ ํจ์์๋ ํธ์ถ๊ท์ฝ์ ์๊ธฐ ๋ง์๋๋ก ๊ฒฐ์ ํ ์ ์๋ค.
์ง๋ฌธ : ๋ง์ด ๋ณด๋ CALLBACK ์ด๋ WINAPI ๋ฑ์ ํธ์ถ๊ท์ฝ์ ์ค์ฒด๋ ๋ญ๊ฐ?
๋ต๋ณ : ์๋ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์๋ฌธ์ด ์๋์ผ๋ก ํ๋ฆด ๊ฒ์ด๋ค.
//---- windef.h ํค๋ํ์ผ
#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall