전체 글 389

Win32 아키텍처 완전 해부 ?

Win32 아키텍처 완전 해부 ? 가상 메모리 이번 호에서는 윈도우 32 아키텍처의 또 다른 면모인 메모리에 대해 공부하면서 윈도우 32의 메모리는 어떻게 구성되어 있으며 윈도우 32 시스템은 어떤 규칙으로 프로그램에 메모리를 지정하는지, 그리고 이미 지정된 가상 메모리의 상태와 현재 구성은 어떻게 알 수 있는지에 대해 예제 프로그램을 통해 알아본다. 윈도우 32의 메모리는 가상 메모리로 모든 프로세스는 실제 존재하는 메모리 칩의 용량과 무관하게 2의 32제곱, 즉 4GB의 가상 메모리 공간을 가지게 된다. 이것은 시스템에서 하나의 프로세스가 생성될 때마다 각 프로세스가 4GB 크기의 가상 메모리를 가진다는 것을 의미한다. 따라서 32비트 메모리 포인터는 이론적으로 0x00000000에서 시작하여 0xF..

C, C++ 문법 2008.07.27

COM 객체 생성과정 설명 및 도식화(깔끔한 설명)

COM객체, 그 탄생의 비밀 이재규 (영산정보통신) 대부분의 경우 프로그래머는 COM객체를 사용하는 클라이언트의 입장에서 코딩한다. COM객체를 사용하기 위해서는 먼저 COM객체를 생성해야 하는데, 이는 CoCreateInstance라는 함수를 이용해서 한줄로 끝낼 수 있다. 그러나 CoCreateInstance를 통해 COM객체가 생성되는 과정을 깊이 살펴본다면 그리 간단치만은 않다. 이 복잡한 과정들을 풀어헤쳐 보고자하는 것이 이글이 주제이다. COM객체 생성방법 COM객체는 COM규약을 준수하는 컴포넌트를 의미한다. COM은 많은 것을 규정하고 있지만, 그 중에서 중요한 것 중의 하나가 COM객체를 생성하는 메커니즘이다. 따라서 COM객체들은 그 객체가 단순하든, 복잡하든 동일한 방법으로 생성할 수..

COM, ATL 2008.07.27

CoInitialize 역할

HRESULT CoInitialize( LPVOID pvReserved ); [개요] COM이 초기 개발단계에서는 Single Thread Apartment(STA) 기반으로 설계가 되었다. 이런 이유로 인해서 CoInitialize 함수는 별도 쓰레드와 메모리 모델에 대한 옵션이 초기 단계에선 고려되지 않고, 다만 확장성을 위해서 LPVOID 부분을 남겨두었으나 이것 마저도 CoInitializeEx함수가 나오면서 필요가 없어졌다. 하는 역할은 COM 관련 DLL를 로딩해서 COM관련 명령어를 사용할수 있도록 해준다. 꼭 초기에 호출해주어야하는 함수다. [Return Values] -에러의 종류는 메모리 부분 에러(생성하는 과정),메모리 모델과 쓰레드 관련 에러,그외 기타 This function su..

COM, ATL 2008.07.27

Com, Atl 언어 독립성에 대한 소고

가끔 com에 대한 기본 개념 글들을 읽어보면 따라쟁이, 앵무새처럼 주절거리는 게 많다..... 위치독립성에 대해 적은 대다수 글들을 보면 "com은 바이너리형태로 이루어지면서 이를 통해 위치독립성을 가지게 된다..." 이글을 처음 보고 한참 혼란스러웠다... 당연히 그 글을 적은 사람도 더 이상의 설명은 없다. 기본원리, 개념에 대해 조금이라도 불만족스러우면 짜증나지 않는가? 나 역시 그런 사람이다. ㅡㅡ 컴파일 언어에서 모든 소스 파일은 컴파일 과정을 거치면 모두 바이너리로 변한다. 그런데 바이너리로 언어독립성을 가진다니....거 참 혼란스럽지 않을 수 없다. 한참을 생각한 결과 다음과 같은 결론을 내릴 수 있었다. 소스 제공의 측면에서 표현한 것이다. 컴포넌트에서는 로딩 모듈인 dll, exe, o..

COM, ATL 2008.07.26

Windows Kernel(윈도우즈 커널)

Windows Kernel(윈도우즈 커널) 조회(61) C/C++, MFC | 2008/05/04 (일) 11:13 추천하기(0) | 스크랩하기(0) 커널 오브젝트(Kernel Objects) 커널 오브젝트는 시스템의 가장 핵심적인 기능인 프로세스, 스레드, 동기화 객체, 디스크 드라이버 사용, 메모리 관리 등의 기능을 제공한다. 오브젝트 명 내용 Access token 보안관련 오브젝트이다. Change notification 파일 입출력 관련 오브젝트이다. Communications device 데이터 흐름을 관리하는 오브젝트로서 직/병렬 포트, 팩스, 모뎀을 통한 데이터의 흐름을 맡는다. Console input 텍스트 기반 콘솔 모드 입출력 관리 오브젝트이다. Console screen buffe..

BrowserHelperObject(BHO) 개념 및 프로젝트 생성 예제

COM(2) - BrowserHelperObject(BHO) 조회(127) C/C++, MFC | 2008/05/04 (일) 11:06 추천하기(0) | 스크랩하기(0) 브라우저 헬퍼 오브젝트 인터넷 익스플로러(버전 4.0 이상) 에서는 브라우저 헬퍼 오브젝트(Browser Helper Object)라는 DLL 컴포넌트를 통해 제3의 개발자가 인터넷 익스플로러에 자신이 원하는 기능을 추가시킬 수 있는 길을 열어놓고 있다. 인터넷 익스플로러는 자신이 새로 기동될 때마다 브라우저 헬퍼 오브젝트로 등록된 COM 객체를 생성하고 그로부터 특정 인터페이스를 얻고 그 인터페이스의 어떤 멤버함수를 호출하게 된다. 이는 곧 제3의 개발자가 개발한 DLL 컴포넌트를 인터넷 익스플로러 프로세스의 주소 공간 속으로 접근시키..

웹, HTML 2008.07.26

컴포넌트 기본 개념

COM(1) 조회(108) C/C++, MFC | 2008/05/04 (일) 10:58 추천하기(0) | 스크랩하기(0) 컴포넌트 컴포넌트는 DLL 또는 EXE 확장자로 끝나는 파일이다. 컴포넌트는 실행 파일이나 동적 연결 라이브러리 안에 존재하고 있기 때문에 우리가 실제로 눈에 볼 수 있는 것은 이러한 확장자를 가진 파일이다. 간혹 OCX 확장자로 끝나는 파일도 있으나 이는 겉으로 보이는 확장자만 다를 뿐 내부적으로는 DLL과 동일하다. 컴포넌트는 실행 파일과 동적 연결 라이브러리 이 두 가지 형태의 겉모습을 가지고 존재한다. 객체 지향 프로그래밍(OOP) 관점에서 컴포넌트는 캡슐화, 다형성, 상속성을 갖춘 객체이다. 게다가 재사용성까지 갖추었다. 컴포넌트는 객체로서 인스턴스 생성이 가능하기 때문에 객..

COM, ATL 2008.07.26