반응형

C++ 73

CComVariant(tagVARIANT)을 wstring 혹은 CString으로 변환하기

CComVariant(tagVARIANT)는 모든 타입을 다 넣을 수 있는 union 구조체라서 해당 내용을 디버깅해 보기가 까다롭다. 여기서는 간단히 값을 볼 수 있게 wstring이나 CString으로 변환하게 해놓았다. CComVariant(tagVARIANT)는 vt라는 필드를 가지고 있다. 해당 필드는 객체가 어떤 타입의 값을 가지고 있는지 enum 타입으로 가지고 있다. 아래 코드는 해당 필드를 이용하여 CComVariant(tagVARIANT) 값을 wstring으로 변환하는 코드다. 윈도우에서 짜는 관계로 편의상 CString의 Format을 이용하였다. 고로 함수의 return 타입을 CString으로 변경하고 조금만 수정하면 CString으로도 변경된다. 참고로 아래 코드는 모든 타입을..

COM 객체에 대해서 비주얼스튜디오(Visual Studio)에서 인텔리센스 사용하기

대신증권 Cybos API의 COM객체를 사용하는데 Visual Studio에서 인텔리센스가 되지 않을때 해결하는 방법이다. Cybos API가 COM객체인 관계로 다른 COM객체에 대해서도 적용될 듯 하다. 우선 COM 자체가 윈도우용인 관계로 관련 라이브러리와 컴파일 및 링크를 위하여 MFC로 프로젝트를 생성하였다. (순수 C++로 하려고해도 관련 파일을 포함하고 컴파일 옵션 및 링크를 설정해야 하기 때문에 이쪽이 편하다.) 1. 우선 아래 예와 같이 COM 관련해서 import한다. #import "C:\DAISHIN\CYBOSPLUS\cpdib.dll" 2. 컴파일을 한다. 그럼 Debug빌드면 관련 Debug폴더에 Release빌드면 관련 Release폴더에 *.tlh 파일과 *.tli파일이 생..

C/C++ 병렬처리(멀티프로세스) 라이브러리 선택

프로그램의 CPU 바운드 작업의 성능을 올리기 위하여 병렬처리 라이브러리를 오랜 만에 살펴보았다. 찾아본 순서와 특징은 아래와 같았다. Intel Threading Building Block(TBB) 인텔에서 만든 것으로 Modern C++ 스타일로 만들어져 있다. AMD도 지원하며 주며 Windows, Linux등 멀티OS를 지원한다. 최근까지도 업데이트 되었다. 오픈소스 버전으로 비상업적인 이용시에는 자유롭지만 상업적인 이용시에는 GPLv2 라이센스로 이용한 코드를 공개해야 한다. 상업적인 이용시에는 상용 버전의 라이브러리 구매가 필요로 하는 듯 보였다. 라이센스 관련 링크 오픈소스 버전은 어떻게 인스톨해야 하는지 찾아보지 않아서, 오픈소스가 아닌 인텔사이트에서 다운받는 것은 다른 팩키지까지 같이 들..

More C++ Idioms

Idioms이란 구글의 정의에 따르자면 영어에서 둘 이상의 단어들이 연결되어 그 단어들이 가지는 본뜻 이외의 특별한 의미를 나타내는 관용어 혹은 숙어라는데 찾아보니 프로그래밍에서는 공통적으로 흔히 발생하는 문제 해결 코드라고도 쓰이는 듯 하다. 근데 개인적으로 보기에는 프로그래밍에서의 뜻은 일종의 언어에 기반한 팁 혹은 패턴으로 볼 수 있는거 같다. 물론 해당 패턴이나 팁들은 특정 상황에 대한 해결법을 제공해 준다고 보면 될 듯 하다. 여기서는 More C++ Idioms를 소개할까 한다. 관련 주소는 아래와 같다. More C++ Idioms 위키에 한창 정리되고 있는 것으로, 물론 내가 해당 이디엄을 습득해서 쓰면 좋겠지만 그 보다 더 좋은 것은 다양한 C++ 테크닉을 이해할 수 있다는 점과 유명 라..

C++ 프로그래밍 2017.02.19

ATL/OLE DB관련 라이브러리 ver 1.02

The Dynamic Database Class Based on ATL/OLE DB 현재 참조하고 있는 코드프로젝트 글입니다. OLEDB 관련된 ATL클래스를 사용하기 쉽게 만들어 놓았습니다. 물론 MFC에서 바로 사용할 수 있겠죠. 물론 라이브러리 사용하려면 기초적인 ATL과 OLEDB구조는 알고 있어야 합니다. 사실 OLEDB는 ATL형식으로 되어 있어 복잡하다고 느껴지는게 사실입니다. 그러나 막상 이해하고 나면 또 별것도 없는게 OLEDB가 아닌가 합니다. 2002년 글로서 아직까지도 지존 중에 한개인걸로 보아 검증받은 코드라는 생각이 듭니다. ODBC와 ADO보다 강력한 DB라이브러리를 원하시면 볼만 합니다. 이 코드는 동적인 관계로 ATL마법사로 만드는 정적인 클래스 기반의 DB처리보다 속도는 ..

[MPP] Visual Studion 2010 Parallel Patterns Library (PPL) 예제

Four Ways to Use the Concurrency Runtime in Your C++ Projects 2009년 10월의 msdn매거진에 나온 병렬 런타임을 사용하는 예제입니다. User Interface의 반응성을 높이기 위하여 배경쓰레드를 사용하는 전통적인 방법을 PPL의 agent를 활용하였을 떄 얼마나 코딩이 더 쉬워지고, 더 굳건해지는 지를 보여주고 있습니다. 참고로 Agent는 병렬처리 엔진에 의한 별도의 쓰레드에서 작동하며 메시지로 데이터를 주고 받습니다. 병렬처리용인 관계로 CPU 개수나 코어 개수에 따라 물리적으로는 별도의 CPU에서 작동할 것입니다. 다른 말로 바꾸면 싱글CPU에서는 오히려 오버헤드가 걸린다는 이야기가 됩니다. 개인적인 지식과 경험으로 보았을 때는 IOCP같은 ..

[MPP] Visual Studion 2010 Parallel Patterns Library (PPL) ver 1.01

Parallel Patterns Library (PPL)은 Visual Studio 2010에 포함될 예정인 Microsoft의 템플릿 기반 멀티프로세스 프로그래밍 라이브러리 입니다. 라이브러리는 MS독자적인 모델로 인텔의 쓰레딩빌딩블록과 유사한 형태를 가지고 있으며 전반적인 인터페이스 모양은 쓰레딩빌딩블록처럼 STL의 모습을 따릅니다. VS2010의 병렬런타임(Concurrency Runtime)은 협업적 태스크 스케줄링(Cooperative Task Scheduling)과 협업적 블록킹(Cooperative Blocking)에서 강점을 가지고 있습니다. 개념적으로 보자면 협업적 태스크 스케줄링이라는 것은 태스크가 끝난 쓰레드에 자동으로 사용 가능한 다른 태스크를 할당하는 등의 효과적인 스케줄링을 의미..

[MPP] Introduction to Intel's Threading Building Block

Intel's Threading Building Block은 멀티프로세서 프로그래밍을 지원하는 인텔의 C++ 템플릿 라이브러리로 멀티플랫폼을 지원합니다. 이 라이브러리는 Epic Games Unreal Engine3 에 포함되어 있습니다. 자세한 것은 정식 홈페이지를 참고하여 주세요. MPP에 대한 대부분의 것이 그러하듯 라이브러리 사용법은 그리 어렵지 않으나 배경지식으로 요구하는 것이 꽤 있고 난이도가 좀 있습니다. 뭐랄까 개인적으로는 멀티쓰레드 프로그래밍이 OS에 대한 개념을 많이 요구하는데 비하여 멀티프로세서 프로그래밍은 CPU, Cache, Memory와 같은 H/W 동작 앨고리듬에 대한 지식과 병렬처리에 대한 개념을 요구합니다. 제가 읽은 것은 Tutorial로 집중력과 끈기를 요하며 시간이 좀..

64Bit Programming Models: Why LP64?

64-Bit Programming Models: Why LP64? Open Systems community에서 왜 LP64모델을 Unix표준으로 선택하였는가에 대한 요약입니다. LP64모델을 선택하기 위하여 포팅성(Portability), 32bit 환경과의 상호운용성(Interoperability with 32bit Enviroments), 표준 준수(standards conformance), 성능(performance effects), 전이비용(transition costs)을 고려하였습니다. 64bit모델을 고려하기 시작한 것은 H/W발전에 따라 4G이상의 주소에 직접적으로 억세스하려고 하는 것을 필요로 해졌기 떄문입니다. 기존의 64bit 환경에 대한 경험상 해당 환경의 개발자들은 32bit 프로..

C++ 프로그래밍 2009.08.22

C++ Technical Report 1 : Regular Expressions

정규식(Regular Expressions)는 텍스트 처리를 코드가 아닌 정규식을 바탕으로 처리하게해 생산성과 효율성을 높입니다. 쉽게 말하여 정규식을 처리를 위한 문자열에 대입하여 문자열 처리를 굉장히 빠르고 강력하게 할 수 있게 된다는 의미입니다. TR1의 정규식은 아래와 같은 6가지의 문법을 지원합니다. ECMAScript, default grammar and the most powerful basic, POSIX Basic Regular Expressions extended, POSIX Extended Regular Expressions awk, POSIX awk grep, POSIX grep egrep, POSIX grep -E Codeguru의 A TR1 Tutorial: Regular Exp..

C++ 프로그래밍 2009.07.31

C++ Technical Report 1 : Random Number Generation

난수 생성 기능이 굉장히 강력해지고 다양해 졌습니다. 기본적으로 알아야할 상식은 난수라는 것은 진정한 난수가 아닌 일정한 공식(알고리즘)에 의하여 생성되는 수라는 점입니다. 그것은 기존의 C의 방법으로 생성할 때 srand((unsinged int)time(NULL));을 써주지 않을 경우에는 프로그램이 실행될 때마다 매번 같은 난수 값이 반복된다는 것을 통하여 알 수 있습니다. TR1은 난수 엔진이라고 불리는 난수 발생 공식을 가진 템플릿 5개를 기본적으로 가지고 있으며 합성 템플릿을 가지고 이들을 조합하여 쓸 수 있습니다. 이런 기본적인 엔진 템플릿을 바탕으로 typedef가 되어 쉽게 쓸 수 있는 클래스가 TR1에 정의되어 있습니다. 그 다음으로 TR1에는 분산(Distribution)을 조정하기 ..

C++ 프로그래밍 2009.07.30

C++ Technical Report 1 : Metaprogramming and Type Traits

메타프로그래밍을 위한 부분으로 헤더에 관련된 내용을 담고 있습니다. Type traits는 generic code가 타입의 핵심 속성을 억세스 할 수 있게 해주며 타입간의 관계 결정 또는 관련 있는 타입 간의 변환을 가능하게 해줍니다. 이 부분은 TR1의 라이브러리를 공부하기 보다는 메타프로그래밍 관련 책을 사서 보심이 좋을 듯 합니다. 그 외에 온라인으로 볼 수 있는 관련 내용은 아래와 같습니다. boost 'TR1 By Subject' boost 'Chapter 1.Boost.TypeTraits' Metaprogramming 메타프로그래밍에 대하여 boost 'Background and Tutorial'의 내용을 바탕으로 간단히 이야기 해보면 다음과 같습니다. 메타프로그래밍은 템플릿 테크닉, 그 중에..

C++ 프로그래밍 2009.07.29

C++ Technical Report 1 : Function pobjects

Polymorphic Function Wrappers (tr1::function) 모든 Callables(함수포인터, 멤버함수 포인터 그리고 함수객체(Functor or Function Objects))에 대하여 단일한 wrapper를 제공합니다. ※ Callables라는 좋은 표현을 한국말로 어떻게 해야할지 모르겠군요... Function Object Binders (tr1::bind) std::bind1st 및 std::bind2nd의 일반화된 버전으로 함수 호출시 파라메터를 유연하게 지정하게 해줍니다. tr1::function의 최대 장점은 C시절의 함수포인터, C++의 멤버함수 포인터, STL과 같이 각광 받기 시장한 함수 객체를 단일 템플릿으로 처리하여 준다는데 있는 듯 합니다. 자세한 코드 설..

C++ 프로그래밍 2009.07.28
반응형