Win32
Win32는 Windows NT와 Windows 9x 계열에서 사용하도록 설계된 Windows의 네이티브 응용 프로그램 인터페이스와 실행 환경을 가리키는 명칭이다. 1990년대에는 16비트 Windows API(Win16)에서 32비트 API로 전환하는 의미가 강했으나, 현대에는 64비...
| 정식 명칭 | Win32 API |
|---|---|
| 분류 | Windows 네이티브 응용 프로그램 인터페이스 |
| 개발사 | Microsoft |
| 기술 계보 | Win16 이후의 32비트 Windows 응용 프로그램 모델 |
| 초기 상용 기반 | Windows NT 3.1 및 Windows 95 |
| 주요 언어 | C, C++ |
| 실행 대상 | Windows 32비트·64비트 |
| 주요 모듈 | kernel32, user32, gdi32, advapi32 등 |
| 메시지 모델 | 윈도 프로시저·메시지 큐·핸들 |
| 호환성 | WOW64, Win32 API 호환 계층 |
| 관련 기술 | Windows API, COM, Direct3D |
| 개발 SDK | Windows SDK |
| 공식 설명 | Microsoft Learn: Win32 applications |
Win32는 Windows NT와 Windows 9x 계열에서 사용하도록 설계된 Windows의 네이티브 응용 프로그램 인터페이스와 실행 환경을 가리키는 명칭이다. 1990년대에는 16비트 Windows API(Win16)에서 32비트 API로 전환하는 의미가 강했으나, 현대에는 64비트 Windows에서도 사용하는 전통적 Windows 데스크톱 프로그래밍 모델을 통칭한다. 따라서 'Win32'가 붙은 앱이 모두 32비트 CPU에서만 실행된다거나 64비트 Windows에 별도 API가 없다는 뜻은 아니다.[1]
Win32 프로그램은 운영체제가 제공하는 프로세스·스레드, 가상 메모리, 파일 및 동기화 객체와 창·메시지 기능을 API로 호출한다. 사용자 모드에는 kernel32.dll, user32.dll, gdi32.dll, advapi32.dll 등의 라이브러리가 있으며 시스템 서비스를 제공하는 내부 구현은 Windows 버전에 따라 달라질 수 있다. 일반적으로 핸들과 구조체, 콜백 함수·오류 코드를 사용하는 C 기반 ABI가 중심이 된다.
그래픽 GUI에서는 RegisterClassEx 등으로 창 클래스를 등록하고 CreateWindowEx로 창을 만들며 윈도 프로시저가 입력·크기 변경·그리기 등의 메시지를 처리한다. 파일·메모리·스레드·IPC 및 보안 API는 GUI 유무와 관계없이 이용할 수 있어 콘솔 프로그램·백그라운드 서비스의 기반이기도 하다. COM 및 DirectX와 같은 인터페이스를 Win32 프로세스에서 사용할 수 있지만 이들은 단일 함수 라이브러리가 아닌 별도 계층이기도 하다.
64비트 Windows에서는 64비트 Win32 스타일 앱과 WOW64에서 실행하는 32비트 앱이 공존한다. 프로그램의 포인터 크기·구조체 정렬·호출 규약과 레지스트리·파일 경로 리디렉션 등을 고려해야 한다. Windows Runtime·.NET·WinUI와 같은 최신 앱 기술도 필요에 따라 네이티브 Windows 서비스를 이용한다. Win32는 특정 에디터 제품이나 단일 컴파일러가 아니라 Windows 앱과 운영체제 사이의 장기적인 호환성 인터페이스다.[2]
Windows의 비공개 Native API(Nt* 계열)와 Win32 API는 서로 구별된다. 문서화된 공개 API는 앱 호환성의 주요 계약을 이루지만 내부 시스템 호출과 커널 구현은 버전마다 변경될 수 있다. Win32를 활용하는 개발자는 공식 Windows SDK와 플랫폼별 최소 지원 버전을 기준으로 빌드·테스트해야 한다.