'API'에 해당되는 글 34건

  1. 2007/10/10 9.12(수) 이론
  2. 2007/10/06 세균전(컴퓨터VS사람)
  3. 2007/09/15 API 디자인 발표영상
  4. 2007/09/11 sprintf 와 wsprintf 이야기 (2)

9.12(수) 이론

from Study/API 2007/10/10 11:00 view 18455
  1. PE 구조 - -_-....아.
    1. An In-Depth Look into the Win32 Portable Executable File Format - Matt Pietrek

  2. 프로그램, 프로세스, 스레드
    1. 메시지 Q는 스레드당 하나이다. 스레드가 생성한 윈도우 창은 스레드와 운명을 같이 한다.
    2. I/O 는 제외.. 프로세스가 관리한다.

  3. 가상메모리
    1. RAM의 물리메모리가 512MB라면 HDD에 가상메모리(pagefile.sys)를 1~2배정도 설정한다.

  4. 잘못된 메모리 참조
    1. 3.1(OS) 시절 일때는 메모리를 잘못 참조 하면 OS가 죽었다. Ex)*0x2100 = 20; 사망!!
    2. 하지만 페이지 Table < 실제주소:1000 와 가상주소:5000>을 갖게 되면서 안전해졌다.(?)
    3. 페이지 Table은 프로세스마다 하나씩 있으며 가상주소내에서 프로세스가 실행된다.
    4. 다른 프로그램의 주소를 침법하지 않는다는 보장이 생겼다.

  5. 페이지 Table







    1. A.exe 내의 improt(dll)을 메모리로 올린다. 이 dll은 자기를 불러낸 PageTable에서 관리하는데 이를 모듈이라 하며 가상 주소를 갖게 된다. 이 가상주소를 '모듈의 번호' Handle로 사용할 수 있게 된다.
    2. 여기서 알수 있는 사실은 HINSTANCE는 실행 파일의 주소 0x0040,000 를 갖게 된다는 것이다.
    3. LoadIcon( hwnd, ID ); 여기서 핸들은 가상메모리에 로드된 핸들의 가상주소를 의미하게 된다.
Tag |

세균전(컴퓨터VS사람)

from -_-.. 2007/10/06 11:41 view 24445

3일간 각고의 노력끝에 했지만 막판 체력부족으로 졸작이 되버린 과제.. 그래도 노력했다.ㅠ_ㅠ.
참고로 마우스 커서를 Window의 ani 커서를 사용했으므로 없으면 안보임..

구조

more..

설명

more..

Tag | , ,

API 디자인 발표영상

from Study/API 2007/09/15 15:00 view 20561
http://www.infoq.com/presentations/effective-api-design

-_-...아 R/C
Tag |

sprintf 와 wsprintf 이야기

from Study/API 2007/09/11 20:23 view 71830
귓동냥으로 wsprintf()의 w가 windows라는것을 알았기 때문에, 윈도우즈에서 프로그래밍할때에는 막연히 wsprintf()를 썼었는데, 오늘 관련 자료를 찾아보면서 보다 정확히 알게 되었다.

간략하게 정리하면
sprintf()는 CRT 라이브러리를 사용하는 함수
wsprintf()는 플랫폼 SDK에서 제공하는 함수, 단 실수(float)형의 사용은 안된다.
/////////////////////////////////////////////////////////////////////////////////////////////
sprintf 를 사용하려면  #include <stdio.h> 가 필요합니다.

이는 보통
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop 식으로 쓰이게 되죠.

그런데 왜 vcl에서는 sprintf 를 포함하지 않았는지 궁금했었는데... wsprintf 가 있기 때문이었습니다.

wsprintf 는
#include <stdio.h>
없이 사용가능한 WIN32 API 로,  일반 ANSI코드과 유니코드 사용 프로그램에
공히 사용할수 있는 문자열 합성 함수입니다.

유니코드를 사용하지 않는 프로그램이면 그냥 wsprintf 를 sprintf 대신 사용하면 됩니다.
유니코드를 사용하는 프로그램이면 역시 wsprintf 를 그냥 사용하면 됩니다.

유니코드를 사용할 경우는 문자열은 L"문자열"; 식으로 유니코드로 표현되어야 하며
char * 대신 wchat_t *  형이 사용되어야 합니다.

그래서 표준적으로 유니코드 사용프로그램과 일반 프로그램에 공히 하나의 코드로 처리하기 위해
컴파일러는 TCHAR 형과 TEXT 매크로를 제공합니다.

가령 OnCreate 이벤트에 다음과 같은 코딩이 가능합니다.
{
TCHAR  buf[100];
wsprintf(buf, TEXT("캡션 메시지: %s"), TEXT("안녕하세요. C++빌더입니다."));
Caption = buf;
}
이 코드는 ANSI형이나 유니코드형 프로그램 양쪽에서 안전하게 동작합니다.
TEXT 매크로 와 __TEXT 매크로는 동일합니다.

Project Option->Directorys...->Conditional defines ; 에 UNICODE 또는 _UNICODE 를 넣어주면
유니코드모드로 컴파일하게 되는데, 이 경우 안전하게 유니코드모드로 컴파일되게 합니다.

프로그래밍할때 아예 습관을 char 대신 TCHAR 으로 하고
"문자열" 대신 TEXT("문자열") 을 쓰는 것도 좋을 것입니다.
Tag | ,