-
UNICODE
- 초기 한 글자를 1Byte(256) 라서 문자를 표현하는데에 한계가 있었다.
- So, 한 글자를 2Byte(65536) 으로 문자를 표현 했지만 메모리를 너무 잡아먹는다.
- So, 영어권 : 1Byte, 다른나라 : 2Byte 로 정해 해결하였다.
- UNICODE : 모든 글자에 고유한 번호를 지정하였다.
-
매크로기반 코드가 나오게 되는 이유 : (tchar.h에 정의된 것)
- Strlen은 null 하나만 있어도 길이를 구해주기 때문에 제대로 문자열의 길이를 구하지 못한다. null 두개 일때의 길이를 구하는 함수는 wcslen이 있다.
- WBCS는 네트워크에 용량이 많아지는 단점이 있다.
- DBCS 는 모든 나라 말을 표현 하지 못한다. 영어 + 그 지역의 언어만 표현한다.
- 이를 해결하기 위해 UTF=> 한글+영어+일본어.. 호환을 해주게 된다.
- UTF는 각 언어에 1byte,2byte,3byte,4byte 를 할당하여 표현한다.
-
정적 라이브러리
- 잘 만들어 놓은 함수 -> obj -> lib 으로 만들기 위해선 링크만 해주면 된다.
- static Library(정적 라이브러리)는 오브젝트(obj)파일의 집합이라 할 수 있다.
- lib를 만들때의 주의 점은 name mangling으로 호출규약이 c와cpp가 다르므로 extern "C"로 만들 함수를 감싸주는 것이 필요하다.
- lib의 특징은 exe의 기계어 코드가 포함되어 실행파일로 만들어지므로 exe만 배포하여 프로그램을 실행 할 수 있다는데에 있다.
-
단점은 lib가 중복되어 배포될 수 있다는 점이다.(메모리 낭비) 또한, Update 할때 마다 프로그램을 다시 Build 해줘야 하는 단점이 있다.
-
DLL(PE포맷)
- 배포시 lib(type), dll, .h 를 같이 동봉해야 한다.
- .edata : 정보를 누출해야 다른 실행파일에서 접근 할수 있으므로 import 해줘야 한다.
- edata는 제공하는 함수에 대한 정보들이 있다. export, import를 구현해야 한다.
- lib => object lib은 함수의 기계어 코드가 포함되어 있어서 파일의 크기가 크지만,
-
lib => type lib은 링크 정보만을 가지고 있다.
-
라이브러리를 추가하는 2가지 방법
- 소스 : pragma comment( lib, "라이브러리" )
- 설정: 프로젝트설정->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 개발자가 막아놨다. -_-..