App Programming/Windows API2006. 8. 10. 14:44
WINAPI 라고 하는건.. FAR PASCAL 라고 선언 되어 있죠....

밑에 분이 잘 설명 해주셨지만.. 이렇게.. 다시 한번 설명 드립니다.

FAR 라고 하는건 무엇이냐.... 일반적으로 C / C++ 프로그램에서.. 사용자가 쓸일은 별로 없습니다.

왜냐면요...함수를 만들때는.. NEAR 과... FAR 라고 하는것이 있습니다....우리가.. 프로그램에서 만들어 쓰는 함수들은.. 기본적으로 NEAR로 선언된것입니다.. 그럼... NEAR과 FAR 가 무엇인지 설명 드리죠...어셈블리 공부를 하신 분은 아시겠지만... 프로그램에서..메모리에 접근하려면 메모리에 접근 하려면.. 두개의 조합으로 메모리를접근 한다는것을 알고 계실껍니다... 아.. 너무 깊이 들어가면.. 복잡할것 같은데.. 간단 하게 말씀드리면... 하나의 프로그램에서.. 접근할수 있는 메모리의 범위안에.. 함수가 있다면.. NEAR 로 선언을 하구요.. 그 범위 밖에 있다면..FAR로 선언을 하죠... WinMain() 이라는 함수도... 내부적으로는 mian() 이라는 함수가 있습니다.. 그런데.. 윈도우 API 에서는. .이것을 숨겨 둔것이죠.. 이것을 숨겨둔 장소가.. 윈도우 시스템 디렉토리 어딘가에...DLL로 있겠죠..
DLL이라고 하면.. 어떤 프로그램에서 호출이 일어나면.. 윈도우가 ..메모리에 DLL을 올리는 것이죠...

그럼.. 감이 오십니까?.... 내가 만든 프로그램을 실행 시키면.. WinMain() 이 함수가 있는 DLL 이 메모리로 올라오죠.. 그리고.. 내가 만든 프로그램이..메모리로 올라 가구요... 그런데.. WinMain()은.. DLL 으로... 멀리 떨어져 있는 메모리에.. 올라가 있겠죠.. 그래서..FAR 라고 사용하는 것입니다...

그럼.. 이제.. PASCAL 이건 무엇일까요.. PASCAL 이라는 언어가 있다는 것은 알고 계시겠죠?...그럼.. 파스칼 언어와 무슨 상관이 있을가요?... C 컴파일러와..PASCAL 컴파일러는.. 함수에 .. 파라미터를 전달할때.. 다른 방법으로 .. 함수의 파라 미터를 전달 합니다... 그런데..C에서는.. 다른 언어에서 사용하고 있는 방법을 사용하기 위해서.. 저런 선언을 하게끔 만들어 주고 있습니다... C에서는 .. 파라미터는.. 스텍으로 들어가구요.. PASCAL 에선. 스트림방식으로 순차적으로 들어간다고 하더군요... 자세한 사항은 저도 잘 알지는 못합니다.. 그냥 그렇다는것만.. 알고 있을뿐이죠....

C에서.. 어셈블리를 쓰려면.. Inline Asm 블리라는것이 지원되지요... 이렇게.. 여러 언어를.. C는 지원을 하고 있습니다.. 어떤분은. 이런 프로그램은 복잡한 코드만 만든다고.. 탐탁지 않게 생각하시는 분도 계시지만... C는 여러가지.. 많은 기능을 가지고 있답니다....

C로 프로그램을 하신다면... 알고리즘이나.. 라이브러리쓰는 부분에서.. 익숙해 지신다면.. 예전에 배우셨더라도.. 어셈블리 공부를 추천합니다... 예전에 공부할때는. 그냥.. 그렇구나라고 생각하던것이.. 이제는.. 아.. 이렇게 해서 이렇게 되는구나 라는.. 희열(?)을 얻을수 있을것입니다...

--------------------------------------------------------------
Use in place of FAR PASCAL in API declarations. If you are writing a DLL with exported API entry points, you can use this for your own APIs
위에 보면 엠에스디엔에서 발취한 내용입니다.

그예기인즉, API선언시에 FAR PASCAL대신에 사용하라고 하였죠?
API엔트리 포인트 시점에 DLL파일을 쓰려고 할때, 이 키워드를 여러분의 API를 위해서 사용할수있다는 간단한 내용입니다.

한가지 더 첨부하자면, WINAPI가 붙으면
The __pascal, __fortran, and __syscall calling conventions
이러한 호출방법들이 WINAPI 라는 매크로로 모든것이 적절하게 알맞게 상대편의 언어에 적절하게 이식되어질수있다고 합니다.


Posted by BAGE