본문 바로가기

bstr , CComBSTR 통상적인 WIN32에서는 BSTR도 WCHAR*입니다. 통상적으로 쓰는 WCHAR 문자열과 다른 점은, 첫문자 앞에 4바이트가 추가로 할당되어 문자열의 길이를 저장합니다. 문자열크기(4바이트)첫번째 문자(2바이트)두번째 문자(2바이트)세번째 문자(2바이트)NULL(2바이트) 이런 구조이구요, BSTR 자체는 WCHAR*로, 첫번째 문자의 주소를 가리키고 있는 포인터입니다.보통 메모리를 할당하면, 가장 첫번째 요소의 주소를 가지고 핸들링 하는데,BSTR은 약간 특이하게 문자열의 크기가 아니라 첫번째 문자의 포인터입니다.그래서 C언어에서 사용할 때, 통상적인 WCHAR*과 비슷하게 사용할 수 있긴 하죠. 조금 헷갈릴 수 있는 게 C언어에서 메모리를 할당하거나 해제할 때는 가장 첫번째 요소의 포인터를 사용하는.. 더보기
[펌]MFC & C - 대용량 파일 빨리 읽기 대용량의 파일 순식간에 읽기1.요약 10M 이상이 되는 파일을 빠르게 읽는 방법을 알아보기로 합니다. 2.본문 v 파일 읽기는 자주 사용하실 것인데.. CFile::Read를 사용하면.. 10MB정도 되는 파일을 읽으면 무진장 오래 걸려서.. 메모리 맵 파일을 이용한 파일 읽기 방법을 올려 들립니다.. 많은 예제가 나온것으로 알지만.. 혹시... 도 몰라서.. BOOL OpenFiles(LPCSTR lpszPathName) { DWORD dwFileSize; HANDLE hFile, hFileMap; LPVOID lpvFile; hFile = ::CreateFile(lpszPathName, GENERIC_READ , 0, NULL OPEN_EXISTING, FILE_ATTRIBUTTE_NORMAL, NU.. 더보기
[펌]C/C++ Secure Function 에 대해서 Visual Studio 2005 Secure Function 에 좀더 쓰겠습니다. 사실 strcpy 류의 함수를 _s 의 postfix를 붙여주는 것만으로는 충분하지 않습니다. char szBuf[10]; strcpy(szBuf, “test”) 와 같은 코드를 그냥 컴파일 하면 분명히 deprecated warning이 나옵니다. 그리고 _CRT_SECURE_NO_DEPRECATE 를 정의하거나, #pragma warning 을 이용해서 warning control을 할 수 있습니다. 이 방법은 예전의 방법입니다. Secure check를 전혀 하지 않는 방법이지요. 그런데 C++의 특성상 string manipulation 과정에서 buffer overrun이나 stack을 깨먹는 경우가 허다해서 _.. 더보기
다중 스레드 동기화 (2) 커널 모드 유저 모드에서 커널 오브젝트에 접근을 할 때 시스템은 커널 모드로 변환을 합니다.커널 오브젝트에는 File, Event, Mutex, Semaphore, Process, Waitable Timer, Job, Thread 가 있습니다. 커널 모드에서 동기화는 커널 오브젝트가 non-Signal인지 Signal 상태인지를 보고 쓰레드를 스케쥴링합니다.커널 오브젝트가 signal상태이면 쓰레드가 돌아갈 준비가 된 상태이고, non-signal 상태이면 쓰레드는 기다림(Wait)상태 입니다. 이벤트(EVENT) 가장 많이 보편화되고 많이 쓰는 다중 쓰레드 동기화 오브젝트가 이벤트가 아닌가 생각이 됩니다.이벤트로 다중 쓰레드 동기화 하는 방법에는 두가지 방법이 있습니다. 개발자가 직접 이벤트를 수동으로.. 더보기
다중 쓰레드 동기화 (1) 쓰레드 동기화 오브젝트 (Thread Synchronization Objects) 쓰레드가 2개 이상 실행될 때 여러가지 변수 가있습니다.하나의 공유자원(예를들어 동시에 접근하는 변수) 에 접근할 때, 파일 입출력 이나 디바이스I/O작업을 할 때 동기화 오브젝트가 필요합니다.동기화 오브젝트 없이 쓰레드가 공유 자원을 사용할 때 공유자원이 원치 않은 값이 될수 있고, I/O작업 시 쓰레드가 I/O작업이 끝날 때 까지 무한정 블로킹(blocking : 특정 함수가 리턴 될 때 까지 기다림)현상이 발생할 수 있습니다.동기화 오브젝트를 사용하여 다중 쓰레드에서 어떻게 안전 하게 공유자원에 접근하고 다른 쓰레드간의 실행 순서등을 조작하는지에 대해 알아 보겠습니다. 동기화 오브젝트는 유저 모드와 커널 모드로 분류할.. 더보기