Win32 API์ ์๋ฃํ
์ด์ ๋ถํฐ ์ฐ๋ฆฌ๋ Windows API๋ฅผ Win32 API๋ผ๊ณ ์ ์ํ๊ฒ ์ต๋๋ค.
๊ทธ ์ด์ ๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ํ๋ก๊ทธ๋จ์ x86์ธ 32๋นํธ ๊ธฐ๋ฐ์ ์ปดํ์ผ๋ฌ๋ฅผ ์ด์ฉํด์ ํ๋ก๊ทธ๋จ์ ๋น๋ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. Win32์ Win64์ ๋ํ ์ค๋ช ์ ์ฐจํ์ ๋ณ๋์ ํฌ์คํ ์ ํตํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
#include <windows.h>
์ฐ๋ฆฌ๋ Windows API๋ฅผ ์ฌ์ฉํ ๋ ์ ํค๋ ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์๊ณ ์์ฃ , ์ด ํค๋ ํ์ผ์ ์ด์ฉํด์ ๊ฐ๋จํ ๋ฉ์์ง ์ฐฝ์ ๋ง๋ค์ด๋ณด๊ธฐ๋ ํ์์ต๋๋ค. ํ์ง๋ง MessageBox์ ์ธ์ ๊ฐ์์๋ ์ฌ๋ฌ๊ฐ์ง ์๋ฃํ๋ค์ด ๋์๋๋ฐ์.
MessageBoxA(_In_opt_ HWND hWnd, _In_opt_ LPCSTR lpText, _In_opt_ LPCSTR lpCaption, _In_ UINT uType);
์ ์์ ์๋ MessageBoxA๋ผํ๋ ๋ฉ์๋๋ฅผ ๋ณด์๊ฒ ๋๋ฉด, ์ธ์๊ฐ์ผ๋ก HWND๋ผ๊ณ ํ๋ ์๋ฃํ๊ณผ LPCSTR, UINT๋ผ๊ณ ํ๋ ์๋ฃํ์ด ๋ณด์ด์ค ๊ฒ์ ๋๋ค. ์๋ง ํ์ค C ์ธ์ด์์๋ ๋ณด์ง ๋ชปํ ์๋ฃํ์ผ ๊ฒ์ ๋๋ค. (์ค์ ๋ก Linux์์ ๋ํ ์๋ ์๋ฃํ๋ค์ ๋๋ค.)
์ฐ๋ฆฌ๋ ์ด ์๋ฃํ๋ค์ด ์ด๋ค ๊ฒ์ธ์ง ์์๋ณด๊ธฐ ์ํด, minwindef.h ํ์ผ์ ๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef float FLOAT;
typedef FLOAT *PFLOAT;
typedef BOOL near *PBOOL;
typedef BOOL far *LPBOOL;
typedef BYTE near *PBYTE;
typedef BYTE far *LPBYTE;
typedef int near *PINT;
typedef int far *LPINT;
typedef WORD near *PWORD;
typedef WORD far *LPWORD;
typedef long far *LPLONG;
typedef DWORD near *PDWORD;
typedef DWORD far *LPDWORD;
typedef void far *LPVOID;
typedef CONST void far *LPCVOID;
typedef int INT;
typedef unsigned int UINT;
typedef unsigned int *PUINT;
minwindef.h ์ 156์ค (Visual Studio 2015 Update 2 ๊ธฐ์ค)์ ์์ํ์ฌ DWORD๋ถํฐ LPCVOID์ ๋ํ ์๋ฃํ์ด ์ด๋ค ๊ฒ์ธ์ง ์ ์๋์ด ์์ต๋๋ค. DWORD๋ ์๋ง Windows์ ๋ ์ง์คํธ๋ฆฌ์์๋ ๋ง์ด ๋ณด์ จ์ ๊ฒ์ ๋๋ค. 32๋นํธ์ ๊ธธ์ด๋ฅผ ์ง๋๋ ์ ์๊ฐ์ผ๋ก unsigned long์ด ์ด์ ํด๋นํฉ๋๋ค. ๊ทธ ์ธ์ UINT๋ผ๋ ๊ฒ๋ unsigned int๋ก ์ ์๊ฐ ๋์ด ์์ต๋๋ค.
//
// ANSI (Multi-byte Character) types
//
typedef CHAR *PCHAR, *LPCH, *PCH;
typedef CONST CHAR *LPCCH, *PCCH;
typedef _Null_terminated_ CHAR *NPSTR, *LPSTR, *PSTR;
typedef _Null_terminated_ PSTR *PZPSTR;
typedef _Null_terminated_ CONST PSTR *PCZPSTR;
typedef _Null_terminated_ CONST CHAR *LPCSTR, *PCSTR;
typedef _Null_terminated_ PCSTR *PZPCSTR;
typedef _Null_terminated_ CONST PCSTR *PCZPCSTR;
typedef _NullNull_terminated_ CHAR *PZZSTR;
typedef _NullNull_terminated_ CONST CHAR *PCZZSTR;
typedef CHAR *PNZCH;
typedef CONST CHAR *PCNZCH;
LPCSTR์ ๋ฌธ์์ด ํ์ ์ธ๋ฐ, ์ด ์๋ฃํ์ winnt.h ํ์ผ์ ์ ์๋์ด ์์ต๋๋ค. ์ฐจํ์ ๋ฌธ์์ด ์๋ฃํ์ ๋ํ ํฌ์คํธ๋ฅผ ๋ณ๋๋ก ์์ฑํ ๊ฒ์ธ๋ฐ์. Linux์์๋ UTF-8์ด๋ผ๋ ์ ๋์ฝ๋ํํ์ Character-code๋ง์ ์ฌ์ฉํ์ง๋ง, Windows์์๋ ๊ณผ๊ฑฐ Windows ๋ฒ์ ์ ํธํ์ฑ์ ์ํด ANSI (Multi-Byte characters) ํ์ ์ ๋ณ๋๋ก ์ ์ํ๊ณ ์์ต๋๋ค. (์๋ง ์ด ํํธ๋ฅผ ๋ฐฐ์ฐ์๋ฉด, Windows์์ ํ๊ตญ์ด ์ธ์ด ํฉ์ด ์์ ๋, ์ ํ๊ธ์ด ๊นจ์ง๋์ง ์ดํดํ์ค ์๋ ์์ ๊ฒ๋๋ค. )
์ ํฌ์คํ ์์๋ ์ผ๋ฐ ์๋ฃํ์ ์ฌ๊ธฐ๊น์ง ์ค๋ช ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ์๋ฃํ๋ค์ ์ฃผ์ฑ ์ดํด๋ณด์๋ฉด, C ์ธ์ด์์ ๊ธฐ์กด์ ์๋ ์๋ฃํ๋ค์ ์ฌ์ ์ํ ๊ฒ๋ ์๋ ๋ฑ ์ฌ์ด ํํ์ด๊ธฐ ๋๋ฌธ์, ๋ง์ง๋ง์ผ๋ก HWND๋ง ์ค๋ช ํ๊ณ ๋์ด๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
typedef void *HANDLE;
#if 0 && (_MSC_VER > 1000)
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
#else
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
#endif
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
HANDLE์ void์ ํฌ์ธํฐ ํ์ผ๋ก ์ ์๋์ด ์์ต๋๋ค. Win32 API์์๋ ์์ ์ด ํ์ฌ ์ฌ์ฉํ๊ณ ์๋ ํ๋ก์ธ์ค, ํ์ผ ๋ฑ์ ์ฌ์ฉํ๊ธฐ ์ํ ๋, ํด๋น ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ ํธ๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ํ๊ณ ์์ต๋๋ค.
'Programming > WinAPI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Windows API๋ก ์์ํด๋ณด๋ ์์ผ ํ๋ก๊ทธ๋๋ฐ (0) | 2017.04.10 |
---|---|
HANDLE ๊ตฌ์กฐ์ฒด์ Kernel Object๋ฅผ ์ด์ฉํ ์๋์ฐ ํ๋ก๊ทธ๋๋ฐ (0) | 2016.08.31 |
HANDLE ๊ตฌ์กฐ์ฒด์ Kernel Object (0) | 2016.08.29 |
SBCS, MBCS์ WBCS / ์ ๋์ฝ๋ ํ๋ก๊ทธ๋๋ฐ์ด ์ค์ํ ์ด์ (3) | 2016.07.19 |
Windows API ์์ ๋ง๋จ (0) | 2016.06.12 |