winapi — 플랫폼에 맞는 호출 규약 자동 선택

winapi — 플랫폼에 맞는 호출 규약 자동 선택

라이브러리를 여러 운영체제에서 함께 쓰고 싶다면, 호출 규약을 플랫폼마다 바꿔가며 선언하는 게 번거로워요. winapi 한정자는 그걸 컴파일러가 알아서 처리해 줘요.

출처: winapi - Free Pascal Reference

본문

winapi 한정자를 쓰면 현재 플랫폼의 네이티브 호출 규약을 지정할 수 있어요. 컴파일러가 운영체제와 아키텍처에 따라 올바른 호출 규약을 골라 주는데, windows-i386에서는 stdcall, **그 외 모든 플랫폼에서는 cdecl**을 선택해요.

다음 예제가 이 동작을 보여 줘요:

function libusb_init(var ctx:plibusb_context):integer;winapi;external libusb1;

이 선언 하나만으로 Windows와 리눅스 양쪽에서 같은 함수를 알아서 맞는 규약으로 호출해 주는 거예요. 크로스 플랫폼 라이브러리를 만들 때 유용한 한정자예요.

더 알아보기

  • stdcall — 스택에 인자를 오른쪽→왼쪽으로 넣는 Win32 규약
  • varargs — 가변 인자를 받는 외부 C 프로시저
  • SYSV_ABI_Default — x86-64 System V 기본 호출 규약