본문 바로가기

Programming/Tips(C++,C#)143

Chapter 07. ATL개요 7.1 ATL의 특징 - COM컴포넌트를 빠르게 구현할 수 있도록, IUnknown, IClassFactory등의 인터페이스에 대한 코드가 구현되어 있음 7.1.1 ATL의 장점 - 작고 빠르고 확장성을 갖는 COM컴포넌트를 만들어 줌. - 템플릿은 코드에서 사용하여 타입이 명확할 때, 컴파일러가 코드를 만들어 준다. 즉, 사용안되는 경우 해당 템플릿은 코드에 포함되지 않는다. 그리고 ATL에서는 IUnknown등의 구현이 지원되어 편리하다. 7.1.2 ~ 7.1.3 ATL프로젝트 만들기, ATL COM객체 추가 - Visual Studio에서 ATL프로젝트를 만들면 '$(프로젝트명)PS'의 프로젝트가 하나 추가되어있다. 이는, 프록시/스텁을 VS에서 만들어주었다. 또한 DllRegister/Unregi.. 2014. 11. 10.
Chapter 06. Visual C++ 컴파일러 6.1 COM지원 VC++컴파일러 개요. - VC++컴파일러는 COM컴포넌트의 형식라이브러리를 읽어 이를 컴파일 가능한 C++코드로 변환해준다. VC++에서 COM을 지원하기 위한 예약어는 다음과 같다. + #import, __Declspec, __uuidof, _com_ptr_t, _com_error, _bstr_t, _variant_t, 전역함수 - 이제까지 해왔던 COM객체의 CLSID를 얻어오는 과정을, #import "progID"로 해결 가능하다. - IHelloPtr pIHello( __uuidof(Hello)); 위 구문은 다음과 같다. IUnknown* pUnk = NULL; IHello* pIHello = NULL; hr = ::CoCreateInstance(clsid, NULL, CL.. 2014. 11. 10.
Chapter 05. Out-of-Process server COM component 5.1 마샬링의 이해 5.1.1 아웃-오브-프로세스 서버 COM컴포넌트 구현시 고려사항 - 인 프로세스 서버에서는 COM컴포넌트가 가리키는 주소 값은 클라이언트와 같은 영역 안에 존재한다. (인-프로세스 서버버 컴포넌트는 클라이언트에서 해당 DLL을 불러온다.) 그러나 아웃-오브-프로세스 서버는 다른 프로세스 메모리 영역에 위치한다. 즉, COM컴포넌트에서 리턴해 준 인터페이스 주소를 클라이언트에서는 사용할 수 없다. 5.1.2 표준 마샬링 과정 - COM은 IPC(Inter-Process Communication. 프로세스간 통신)을 위해 LPC(Local Procedure Call)과 RPC(Remote Procedure Call) 두가지를 사용한다. LPC는 같은 시스템 상에서 실행되는 아웃-오브-.. 2014. 11. 10.
chapter 7-9. 내용정리 1. 반복자 반복자 카테고리와 기능 카테고리 기능 제공자 입력반복자 전방향 읽기 istream 출력반복자 전방향 쓰기 ostream, inserter 전방향반복자 전방향 읽기/쓰기 양방향반복자 전/역방향 읽기/쓰기 list, set, multiset, map, multimap 랜덤액세스반복자 랜덤액세스 deque, vector, string, array 전방향 반복자는 입력/출력반복자의 기능을 포함하고, 양방향 반복자는, 전방향반복자 + 역방향 지원, 랜덤 액세스 반복자는 양방향 반복자에, 랜덤 액세스까지 지원하는 반복자. * 반복자에서 증가/감소 연산자 사용시, 전위증가(감소)연산자를 사용하는 것이 더 유리하다. 후위증가(감소)연산자의 경우 임시객체를 생성하기에 상대적으로 더 느리다. 1) 보조반복자 .. 2014. 11. 7.
Chapter 2-6. 내용정리 1. 템플릿 - 임의의 데이터 타입을 위해 작성된 함수 or 클래스. 정확하게는 '정의'만 한 것이다. 예를 들어 다음과 같은 템플릿이 있다고 하자. template inline const T& max(const T& a, const T& b) { return a>b? a: b; } 위 정의 자체는 아무런 영향을 주지 않는다. 이 정의가 유효하려면, 사용이 되어야 '컴파일타임'에 실제 함수가 만들어진다. 예) int a = 10; int b = 10; max(a,b); // 위 템플릿에서 max(T, T). 여기서는 타입이 int이므로, max(int, int)함수가 생성된다. float c = 10.1f max(a,c); // 찾아봐도 max(T1, T2)는 존재하지 않는다. 컴파일러시 T가 모호하다고.. 2014. 10. 30.
할당자 사용자 지정 할당자 예 #include #include namespace MyLib{ template class MyAlloc{ public: //type정의 typedef T value_type; //원소의 타입 allocator와 동일 typedef T* pointer; //원소의 포인터에 대한 타입 typedef const T* const_pointer; //상수 포인터에 대한 타입 typedef T& reference; //원소의 레퍼런스에 대한 타입 typedef const T& const_reference; //원소의 상수레퍼런스에 대한 타입 typedef std::size_t size_type; //가장 큰 객체의 사이즈를 표기하기 위한 타입 typedef std::ptrdiff_t diff.. 2014. 10. 30.
728x90