본문 바로가기

Programming

[C++11] thread 지원 (1) C++11에 언어 차원의 thread를 지원하게 되었습니다.OS에 상관없이 사용이 가능하며 전달할 수 있는 인자의 형식도 자유롭게 사용이 가능합니다.thread는 헤더에 정의가 되어있습니다.먼저 간단한 thread의 예제입니다. #include #include void ThreadFunc(int nVal) { std::cout 더보기
C++ REST SDK(카사블랑카) wstring으로 받는 법 C++ REST SDK를 통해서 파일로 받는 방법은 아래 링크를 참조하시면 됩니다.2015/06/25 - [Programming/C&C++] - C++ REST SDK(카사블랑카)로 웹페이지 가져오기일반적으로 HTTP클라이언트는 파일을 생성하지 않습니다.받은 결과를 직접 파싱해서 사용하는 것이 일반적인 방식입니다.std::wstring으로 결과를 전달받는 전체 코드는 다음과 같습니다.wstring으로 전달 받은 이후에 XML 파서(Parser) 등으로 원하는 값을 출력하면 됩니다. #include // std::wstring #include // std::vector #include // std::pair #include int main() { // return wstring value std::wstr.. 더보기
C++ REST SDK(카사블랑카)로 웹페이지 가져오기 먼저 카사블랑카(Casablanca)를 설치하는 방법은 아래 링크에서 확인 가능합니다.2015/06/12 - [Programming/C&C++] - C++ REST SDK(Casablanca) 설치 방법C++ REST SDK를 통해서 간단하게 웹페이지를 가져오는 방법입니다.먼저 웹페이지를 가져오고 가져온 내용을 html 파일로 기록하기 위해서 다음 헤더를 추가합니다. #include #include 그리고 using 구문을 추가합니다.반복적인 코딩을 제거하기 위함입니다. using namespace utility; using namespace web; using namespace web::http; using namespace web::http::client; using namespace concurre.. 더보기
MFC 사용자 정의 메시지 처리 WM_CREATE, WM_PAINT 등의 메시지는 이미 정의되어 있는 윈도우 메시지입니다.WM_ 접두어는 윈도우 메시지를 위해서 사용됩니다.이런 기본적으로 정의된 메시지 외에 사용자가 정의한 메시지를 처리할 경우도 존재합니다.UI 스레드를 추가해서 스레드간 통신에도 사용할 수 있습니다.간단한 MFC 프로젝트를 생성합니다.Dialog based로 변경하고 Finish를 눌러서 생성합니다.Dlg.cpp(앞에 프로젝트명이 붙습니다.) 파일에 Message Map이 정의되어 있습니다. BEGIN_MESSAGE_MAP(CUMTestDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() END_MESSAGE_MAP() 메시지와 해당 메시지를 처.. 더보기
SDI Document/View 구조 제거하기 MFC의 SDI(Single Document Interface)는 기본적으로 Document/View 구조를 지원합니다.프로젝트를 생성할 때 몇 번의 클릭으로 간단하게 Document/View 기반으로 생성할 수 있습니다.자동으로 생성되는 Doc/View 구조가 필요하지 않을 경우도 발생합니다.SDI에서 Doc/View 구조를 제거하는 방법입니다.먼저 프로젝트를 생성합니다.일단 Document/View architecture support는 그대로 둡니다. Doc/View가 설정된 프로젝트에서 구조를 제거하기 위해서 입니다.Compound Document Support, Document Template Properties는 기본 설정을 사용합니다.그리고 Database Support도 기본 설정으로 둡니.. 더보기
CString 토큰(Token)으로 분리시키기(AfxExtractSubString) C/C++에는 기본적으로 C의 strtok을 통해서 토큰으로 문자열 분리가 가능합니다.토큰(Token)이라는 지정된 문자를 기준으로 문자열을 쪼개면서 추출이 가능합니다.만약 문자열이 "Hello#World"이고 토큰이 '#'이면 다음과 같이 결과를 얻을 수 있습니다.HelloWorldMFC에서도 동일한 기능의 함수가 제공됩니다.AfxExtractSubString() 함수를 통해서 동일한 기능을 제공합니다.먼저 strtok()은 몇 가지 문제점을 가지고 있습니다.원본이 훼손되며 thread-safe하지 않다는 점입니다.strtok()은 두 번째 호출부터는 NULL을 전달합니다.토큰의 위치를 식별하기 위해서 별도의 static 변수를 관리하고 있기 때문입니다.이 변수로 인해서 strtok()을 동시에 쓰면 .. 더보기
BOM(Byte Order Mark)에 따른 파일 처리 Byte Order Mark(BOM)은 바이트 순서 표식이라고 합니다.유니코드 형식(엔디안, 인코딩 방식 등)을 지정하는 일종의 헤더입니다.일반적으로 유니코드가 아닌 경우 BOM이 필요하지 않습니다.하지만 유니코드의 경우는 BOM이 필요할 수 있습니다.Windows가 사용하는 UTF-16 방식의 경우 U+FEFF를 BOM으로 사용합니다.인텔 등이 사용하는 일반 PC의 x86 환경에서는 리틀 엔디안을 따르기 때문에 FF FE로 기록이 됩니다.MFC 등에서 유니코드로 파일을 기록할 때는 먼저 0xFEFF를 바이너리 형태로 입력해야 합니다.이렇게 작성된 파일은 나중에 다시 읽을 때 BOM을 통해서 어떻게 읽는지 알 수 있습니다.UTF-16 외에 각 유니코드 인코딩 방식에 따른 BOM은 다음과 같습니다.Enco.. 더보기
DLL 파일만 있을 때, lib 파일 생성하기 프로젝트가 커지면 DLL을 자주 사용하게 됩니다.DLL을 MFC나 Win32 프로젝트에서 사용하는 방법은 크게 두 가지입니다.첫 번째 방법은 DLL의 함수를 export하는 lib와 h(헤더)파일을 사용하는 방법입니다.두 번째 방법은 LoadLibrary를 통해서 동적으로 DLL을 불러오고 해당 함수의 포인터를 얻는 방법입니다.DLL 내부에서 외부에 노출시키는 함수 목록을 보기 위해서 dumpbin 명령어를 사용할 수 있습니다.Visual Studio를 켜고 TOOLS 메뉴의 Visual Studio Command Prompt를 실행합니다. dumpbin /exports a.dll 이렇게 실행하면 a.dll 내부의 함수 목록을 확인할 수 있습니다.여기서 얻은 정보를 통해서 lib 파일을 생성할 수 있습니.. 더보기