원문 http://wisdom.sakura.ne.jp/system/winapi/win32/win1.html
Windows 프로그래밍
여기서는 Microsoft사의 Windows 오퍼레이팅 시스템의 프로그램을 해설합니다.
Windows 프로그래밍을 하기 위해서는 Windows가 제공하는 API를 조작합니다.
API라는 것은 Application Programming Interfaces라는 것으로
어플리케이션으로부터 OS를 조작하기 위한 수단입니다
(이것은 개발자가 제공하고 있습니다)
네이티브한 Windows API를 조작하는 것은,
Windows 프로그래밍 및 Windows라고 하는 OS의 구조를 이해하는 것이 매우 중요합니다.
하지만, 동시에 곤란하게 이해하기 어려운 부분도 많아 나름의 프로그래밍 경험을 필요로 합니다.
Windows API를 배우는데에는, 많은 기초지식을 필요로 합니다
이 강좌를 열람하는데에는, 적어도 C언어의 지식이 필요합니다.
또, Windows 오퍼레이팅 시스템(9x계열, NT계열 중 하나)을 숙지하고 있는 것으로 합니다.
제3에 문자코드나 컴퓨터 아키텍쳐도 자세히 하지 않으면 안됩니다.
Unicode나 CISC, RISC라고 하는 말을 듣고 이해하지 못하면
일단은 정보기술에 대한 기초지식을 익히셨으면 합니다.
Windows 프로그래밍의 방법
이 강좌에서는, Microsoft Visual C++ 6.0과 같은 개발환경을 따릅니다.
C언어에서 API를 불러내는 일반적인 Windows 프로그래밍 방법을 사용합니다.
몇번이나 말합니다만, 이를 위해서는 C언어같은 기초지식을 필요로 합니다.
하지만, Windows 프로그래밍의 수단은 이것만 있는 것이 아닙니다.
Microsoft Visual Basic이나 Boland Delphi같은 수단도 있습니다.
Sun Microsystems사의 Java라고 하는 수단도 있습니다.
Microsoft Visual C++이 있으면, MFC라고 하는 클래스군(郡)도 지원되고 있습니다.
상기(上記)한 방법은 네이티브 API를 직접 조작하는 것보다 훨씬 쉽게 습득할 수 있습니다.
개발효율이나 관리를 중시하고 싶다면, 오히려 이쪽이 더 뛰어난 방법이겠죠.
다만, 이러한 방법에서 API의 지식이 있다면, 더욱 고도의 프로그램을 만들 수 있겠죠.
무엇보다, API를 직접 조작하는 방법은, 더욱 더 OS의 기능을 끌어내는 것이 가능합니다.
Windows의 역사
안타깝게도 Windows의 역사를 세세하게 적으면 그것만으로도 1권의 책이 됩니다.
빌 게이츠씨나 애플의 잡스씨, 그들과 팰로앨토 연구소 「앨토」와의 만남
현대 컴퓨터의 역사는, 가히 드라마라고 말하는 이면(裏舞台)이 있었습니다.
그것을 여기에 표기하는 것은, 문장력(그리고 지식이・・・)이 없는 필자에게는 무리의 이야기 입니다.
여기서는, Windows 프로그래밍을 하기 위해 필요한 단순한 역사를 따르기로 합시다.
연대 |
메이커 |
플랫폼 |
해설 |
1983 |
Apple Computer |
Lisa |
Mac의 전신(全身) |
1983 |
Microsoft |
Windows 발표 |
릴리즈는 이로부터 2년 후 |
1984 |
Apple Computer |
Macintosh |
GUI 표준의 확립 |
1985 |
Microsoft |
Windows Version 1.0 |
Windows의 초판 |
1987 |
Microsoft |
Windows Version 2.0 |
Windows/386 |
1987 |
IBM/Microsoft |
OS/2 Version 1.0 |
공동개발된 OS |
1988 |
IBM/Microsoft |
OS/2 Version 1.1 |
PM이라고 불리는 GUI 지원 |
1990 |
Microsoft |
Windows Version 3.0 |
이 후에 IBM은 OS/2를 |
1992 |
Microsoft |
Windows Version 3.1 |
멀티 미디어의 지원 |
1993 |
Microsoft |
Windows NT |
Server와 Workstation으로 나뉘었음 |
1995 |
Microsoft |
Windows 95 |
개인용 최초의 32비트 지원 일본에도 많은 유저를 확보 |
1998 |
Microsoft |
Windows 98 |
처리 성능이나 인터넷 기능 |
2000 |
Microsoft |
Windows 2000 |
NT의 후계기(後継機)가 됨 |
2000 |
Microsoft |
Windows Me |
Me는, Millennium Edition의 약(略) |
Macintosh 등의 개발공정은 생략했습니다만, 이런 느낌입니다.
흥미가 있으면, Macintosh나 OS/2등의 개발사(開発歴)도 알아보면 좋겠죠
그런데, 문제는 우리들이 이제부터 하려고 하는 Windows 프로그래밍
도대체 어떤 Windows 프로그래밍인 걸까요・・・
안심하세요. 사실 NT계열도 9x 계열도 기본적으로는 호환성이 있습니다
하지만, 각각의 아키텍쳐는 다릅니다
초기 버전은 논 프리엔프티브(none-preemptive)의 16비트 컴퓨터이었습니다만
특히, 16비트에서 32비트 아키텍쳐로의 이행시(移行時)에는
API에도 큰 변경이 가해지는, 몇가지 과거의 API를 사용하는 것은 권장되지 않습니다.
이 때문에, 16비트 아키텍쳐의 Windows API(Windows 3.1까지)를 Win16이라고 부르고
이제 우리가 하려고 하는, 32비트 Windows의 API를 Win32라고 부릅니다.
Win32의 위치는, Win16의 확장판 같은 느낌입니다.
그것들은 호환성을 유지하면서, Win16에서 실현할 수 없는 명령(함수 호출)이 추가되었습니다.
또, Windows9x와 Windows NT는, 쌍방(双方) Win32 API를 지원하고 있습니다만
각각, 고유의 기능이 구현되어 있으므로 완전한 호환은 아닙니다.
동적 링크
Windows 프로그래밍의 기본 개념은 동적 링킹입니다.
Windows는, 디스플레이 등에 표시하는 그래픽 함수를 지원하고 있습니다.
어플리케이션은 Windows의 함수를 불러내(함수 호출) 그 기능을 이용합니다.
Windows가 지원하는 함수는 수천개나 있으며, 이 강좌에선 모든 것을 소개할 수 없습니다.
이것들의 함수는 동적 링크 라이브러리(DLL)에 준비되어 있습니다.
확장자는 일반적으로 *.dll이지만 *.exe일 때도 있습니다.
Windows의 함수는 C언어 등의 표준 라이브러리와 다르게
프로그램의 외부에 존재해, 프로그램에서 함수의 엔트리 포인트(Entry Point)에 접속합니다.
DLL의 이름이나 위치는 임포트 라이브러리(Import Library)가 제공하고 있습니다.
프로그래머는 Windows 프로그램을 생성할 때, 우선 이것에 링크하지 않으면 안됩니다.
// 임포트 라이브러리는, 개발 환경이 지원하고 있습니다.
이상 자세한 것은, 실제로 프로그램을 보지 않으면 이해하지 못하겠죠
자, 곤란한게 기다리고 있다고 생각합니다만, 꼭
간이 환경(簡易環境)에 기대지 않고, 서드 파티제(製)의 라이브러리에 기대지 않는다
당신이 직접 만든 최고의 라이브러리로 Windows를 움직이는 것이 가능하게 됩니다.