9.13(목) 이론-1

from Study/API 2007/10/10 12:06 view 18057
  1. UNICODE
    1. 초기 한 글자를 1Byte(256) 라서 문자를 표현하는데에 한계가 있었다.
    2. So, 한 글자를 2Byte(65536) 으로 문자를 표현 했지만 메모리를 너무 잡아먹는다.
    3. So, 영어권 : 1Byte, 다른나라 : 2Byte 로 정해 해결하였다.
    4. UNICODE : 모든 글자에 고유한 번호를 지정하였다.
    5. 매크로기반 코드가 나오게 되는 이유 : (tchar.h에 정의된 것)
      1. Strlen은 null 하나만 있어도 길이를 구해주기 때문에 제대로 문자열의 길이를 구하지 못한다. null 두개 일때의 길이를 구하는 함수는 wcslen이 있다.
    6. WBCS는 네트워크에 용량이 많아지는 단점이 있다.
    7. DBCS 는 모든 나라 말을 표현 하지 못한다. 영어 + 그 지역의 언어만 표현한다.
    8. 이를 해결하기 위해 UTF=> 한글+영어+일본어.. 호환을 해주게 된다.
    9. UTF는 각 언어에 1byte,2byte,3byte,4byte 를 할당하여 표현한다.

  2. 정적 라이브러리
    1. 잘 만들어 놓은 함수 -> obj -> lib 으로 만들기 위해선 링크만 해주면 된다.
    2. static Library(정적 라이브러리)는 오브젝트(obj)파일의 집합이라 할 수 있다.
    3. lib를 만들때의 주의 점은 name mangling으로 호출규약이 c와cpp가 다르므로 extern "C"로 만들 함수를 감싸주는 것이 필요하다.
    4. lib의 특징은 exe의 기계어 코드가 포함되어 실행파일로 만들어지므로 exe만 배포하여 프로그램을 실행 할 수 있다는데에 있다.
    5. 단점은 lib가 중복되어 배포될 수 있다는 점이다.(메모리 낭비) 또한, Update 할때 마다 프로그램을 다시 Build 해줘야 하는 단점이 있다.

  3. DLL(PE포맷)
    1. 배포시 lib(type), dll, .h 를 같이 동봉해야 한다.
    2. .edata : 정보를 누출해야 다른 실행파일에서 접근 할수 있으므로 import 해줘야 한다.
    3. edata는 제공하는 함수에 대한 정보들이 있다. export, import를 구현해야 한다.
    4. lib => object lib은 함수의 기계어 코드가 포함되어 있어서 파일의 크기가 크지만,
    5. lib => type lib은 링크 정보만을 가지고 있다.

  4. 라이브러리를 추가하는 2가지 방법
    1. 소스 : pragma comment( lib, "라이브러리" )
    2. 설정: 프로젝트설정->Linker->Input->Additional depends(추가 종속성)

      5. 다른 윈도우의 HWND에  DestroyWindow( hwnd ); 가 먹히지 않는 이유.

MSDN 에서는 이문제를 한줄로 표현 해놓았는데
"A thread cannot use DestroyWindow to destroy a window created by a different thread"
"스레드간의 WM_DESTROY 메세지 보내는 것을 허용하지 않는다."  란다.-_-..
GetLastError 로 확인 해보면 ERROR_ACCESS_DENIED( 접근 금지 ) 에러코드가 생성된다.
이 문장을 본 한 블로거는 이런 표현을 썻다. 왓 더~ 헬~
"WHAT THE...!?! I have words for that that are inappropriate for this blog. I need a good chunk of lye for cleaning of the mouth."
출처 : http://cubicspot.blogspot.com/2005_03_01_archive.html
아무튼 위대한 MS의 Windows 개발자가 막아놨다. -_-..


 

Tag | ,

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다