목록DEV&OPS/C & C++ (5)
삶 가운데 남긴 기록 AACII.TISTORY.COM
커널 오브젝트(kernel object) 프로세스나 스레드, 파일 같은 리소스를 관리하기 위한 정보들을 모아놓은 구조체가 메모리에 로딩되어 블록 형태로 존재하고 있는데 이를 가리켜 커널 오브젝트라고 부릅니다. 각각의 리소스 별로 따로 커널 오브젝트들이 존재하게 됩니다. 예를들어 하나의 프로세스가 생성되면 그 프로세스를 위한 커널 오브젝트가 운영체제에 의해 생성됩니다. 오브젝트 핸들(kernel object handle) 운영체제는 커널 오브젝트의 간접적인 조작을 위해 여러 가지 시스템 함수를 제공합니다. 오브젝트 핸들은 커널 오브젝트 식별을 위해 할당되는 값를 말합니다. int _tmain(int argc, TCHAR* argv[]){ //GetCurrentProcess(): 현재 프로세스의 오브젝트 핸..
GetLastError() 윈도우즈 시스템 함수들은 에러가 났을 때 리턴 값이 대개 NULL 이기 때문에 에러 원인을 알 수 없습니다. 이럴 때 사용하는 함수가 GetLastError 함수를 사용하면 에러코드를 획득할 수 있습니다. 이 에러코드는 MSDN을 참고하면 무슨 에러인지 알 수 있게 됩니다. #include #include #include int _tmain(void) { HANDLE hFile = CreateFile(_T("TEST.DAT"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { _tprintf( _T("error co..
마이크로소프트 윈도우즈 시스템은 16비트(9X) 부터 32비트(XP)를 거쳐 64(vista~)비트 기반으로 설계되어 있습니다. 변수를 저장하는 자료형의 크기가 변하는 관계로 포인터를 다룰때 문제가 생깁니다. define 매크로를 이용하여 빌드시 실행 환경에 따라 빌드를 비교적 쉽게 바꿀 수 있지만, 소스가 매크로로 가득하게되면 가독성이 매우 떨어지게 됩니다. 이에 대한 대안이 Polymorphic 자료형을 이용하는 것입니다. 아래 예제에 사용된 것 처럼 Unsigned Integer 자료형을 PTR 키워드를 붙이게 되면 실행환경에 따라 그 자료형의 크기가 결정됩니다. #include #include #include //64비트 환경 32비트 환경에 따라서 다르게 선언되는 자료형 UINT_PTR UINT..
MFC 문자열 처리 c언어와 c++ 에서는 string이라는 자료구조를 컴파일러 차원에서 지원하고 있지 않습니다. (가장 많이 쓰는 자료구조형임에도 불구하고 옛날 언어라...) 그래서 c/c++에서는 string을 char 의 배열에 끝에 널문자(\0)를 넣어 포인터로 관리합니다. Windows 에서는 이런 string처리를 위해 char* 를 대신해 LPSTR, LPCSTR, LPTSTR, LPCTSTR , LPWSTR, LPCWSTR 같은 자료형을 지원하고 있습니다. (안그래도 불편한데 더 불편하게 만들었습니다. 헝가리안 표기법의 유산이지요.) 그래서 이 암호같은 약자들의 뜻을 알아보도록 하겠습니다. LP는 long pointer 16bit 시절 포인터는 모두 16bit였고 24bit 메모리를 lon..
string class Header string s, s1, s2, s3; .assign(): 문자열 할당 //인수로 지정된 문자열을 할당 s1.assign("ABCDEFGH"); //s1="ABCDEFGH" //문자를 특정 개수 만큼 문자열에 할당 s2.assign(3, 'A'); //s2 = "AAA" //문자열의 지정된 인덱스 부터 특정 개수를 복사해서 할당 s3.assign(s1, 2, 4) //s3 = "CDEF" .append(): 문자열 추가 //기존 문자열 뒤에 추가 s.append("ABCDEF"); //s = "ABCDEF" //문자를 특정 개수 만큼 기존 문자열 뒤에 추가 s.append(3,'a'); //s = "ABCDEFaaa" //문자열의 지정된 인덱스 부터 특정 개수를 복사해..