전화 컨벤션
절차 또는 기능을 선언 할 때 다음 지표 중 하나를 사용하여 통화 규칙을 표시 할 수 있습니다 : Register, Pascal, CDECL, STDCALL 및 SAFECALL. 예를 들어,
함수 myfunction (x, y : real) : cdecl;
...
전화 규칙은 매개 변수가 루틴으로 전달되는 순서를 결정하고 스택에서 매개 변수를 삭제하고 매개 변수를 전달하고 오류 및 예외 처리를 삭제할 때 레지스터 사용에도 영향을 미칩니다. 기본 호출 규칙은 등록입니다.
• 레지스터 및 파스칼 호출은 왼쪽에서 오른쪽으로 패스 매개 변수, 즉 가장 왼쪽 매개 변수가 가장 빨리 계산되고 전달되며 최종적으로 오른쪽 매개 변수가 계산되고 통과됩니다.
• CDECL 호출 외에도 절차 및 기능은 반환하기 전에 스택에서 매개 변수를 제거하는 반면 CDECL은 통화가 반환되면 발신자는 스택에서 매개 변수를 제거합니다.
• 레지스터 호출은 최대 3 개의 CPU 레지스터를 사용하여 매개 변수를 전달할 수 있으며 다른 통화는 모두 스택을 사용하여 매개 변수를 전달합니다.
• Safecall Call은 Windows에서 프로세스 간 COM 오류 알림을 구현하는 예외 "방화벽"을 구현합니다.
다음 표는 전화 규칙을 요약합니다.
--------------------------------------------------------- ------------------------------------------------
-인디케이터 단어 ----------------------------------------------------- --------------------------------------------------------- --------------------------------------------------------- --------------------------------------------------------- --------------------------------------------------------- ---? |
-register ------------------------------------------------------------ 예 ------------------------ ||
-Pascal --------------------------------------------------------------- 아니오 --------------------------- |
-CDECL ---------------------------------- 발신자 --------------- --- 아니요 ----------------------- |
-StdCall ------------- 오른쪽에서 왼쪽 ---------- 일상 --------------- --- 아니요 ----------------------- |
-safecall ------------- 오른쪽에서 왼쪽 ---------- 일상 --------------- --- 아니요 ------------------- |
--------------------------------------------------------- -------------------------------------------------------
기본 레지스터 호출은 일반적으로 스택 프레임을 생성하지 않기 때문에 가장 효율적입니다 (C/C ++로 작성된 공유 라이브러리에서 호출 할 때는 레지스터가 사용되어야합니다. STDCALL 및 SAFECALL이 권장됩니다. Windows에서 System API는 STDCALL 및 SAFECALL을 사용하는 반면 다른 운영 체제는 일반적으로 CDECL을 사용합니다 (STDCALL은 CDECL보다 더 효율적 임).
이중 인터페이스를 선언하는 방법은 Safecall을 사용해야합니다. 통화 규칙에 대한 자세한 내용은 프로그램 제어를 참조하십시오.
16 비트 Wind