본문 바로가기

프로그래밍/C/CPP

(14)
[Win32] CharLowerA(utf8str) 은 문제가 생길 수 있다. utf-8 인코딩된 한글 문자열에 대해서 CharLowerA 를 적용하면, 문자가 깨질 수 있다. char utf8str[200];WCHAR s1[200] = L"제공호";WCHAR s2[200]; // s1 을 utf8 인코딩으로 변환하여 utf8str 을 채운다. (WideCharToMultiByte 등을 사용.) CharLowerA(utf8str); // utf8str 중에서 알파벳만 모두 소문자로 바꾸려 한다. // 변경된 utf8str 을 unicode 로 변환하여, s2 에 저장한다. (MultiByteToWideChar 등을 사용.) cmp = wcscmp(CharLowerW(s1), s2); 위 코드에서 두가지 경로로 문자를 소문자화하여 비교한다.1. s1 -> utf8로 인코딩 -> Ch..
[VCPKG] VCPKG OFFLINE 사용하기 python pip의 편리성에 익숙해진 사람(나)들은 cpp 오픈소스 라이브러리들을 빌드하며 무수히 머리털을 뽑아냈다. (너무 고달펐음. 빌드뿐 아니라, 라이브러리, 인클루드 패쓰 설정하고 하는 것도)마이크로소프트에서 visual studio 에 오픈소스 라이브러리들을 매끄럽게 통합시키는 vcpkg 라는 툴을 (이미 몇년 전에)개발했다는 걸 알았다. 이걸 테스트해 보려고 하고 있는데...안타깝게도, vcpkg 는 vcpkg install zlib 와 같은 명령을 때리면, 오픈소스 라이브러리 소스를 네트워크를 통해 다운로드 받아와서, 빌드를 진행한다.그래서, 인터넷 연결이 되지 않는 내 주 개발환경에서는 vcpkg 를 쓸 수 없는 것인가 하고 낙담하고 있는 중에, 다음과 같은 글을 reddit 에서 발견했..
[번역|스택오버플로우] 타입명 뒤에 괄호를 붙이는지 안 붙이는지에 차이가 있나? https://stackoverflow.com/questions/620137/do-the-parentheses-after-the-type-name-make-a-difference-with-new [질문] by David ReadTest 가 보통 클래스라면, 아래 두가지에 차이가 있나? Test* test = new Test; Test* test = new Test(); [3번 답변] by bayda 일반적으로 첫번째 것은 디폴트-초기화, 두번째 것은 값-초기화가 된다. 예를 들어 int (POD 타입)의 경우int* test = new int - *test의 값은 무엇이라도 될 수 있다.int* test = new int() - *test 의 값은 0이 될 것이다. 이외의 동작은 Test 타입이 어떤 것..
[CEF] CEF Chromium Embedded Framework 빌드하기 CEF Chromium Embedded Framework 빌드하기 https://bitbucket.org/chromiumembedded/cef-project 의 Build 섹션의 지시를 따라 윈도우 비주얼 스튜디어 2015 빌드 솔루션을 생성하면서 어려웠던 부분을 기록. Setup : cmake 를 설치한다. 비주얼 스튜디오 2013 이상, 운영체제는 윈도우 7이 필요하다. git 으로 소스코드를 다운받으라고 하는데, 일단은 필요 없었다. Build : http://opensource.spotify.com/cefbuilds/index.html 에서 윈도우 32/64비트용 tar 파일을 받는다. tar 파일을 풀어 놓고. 폴더에 mkdir build 로 빌드 폴더를 만들고, build 폴더에서 cmake ..
[VS2015] nuget package 오프라인 설치시 문제점. 인터넷이 연결되지 않은 개발환경에 nuget package 를 깔아서 테스트해 보는 상황이 발생. 인터넷 등을 참조하여 필요한 nupkg 를 다운로드 받고, 비주얼 스튜디오 누겟 패키지 관리자 콘솔에서 install-package 명령을 실행하였으나, 에러가 발생했다. PM> Install-Package cef.redist.x86 -Source nugetpackages'native,Version=v0.0'을(를) 대상으로 하는 'clr_cefbrowser' 프로젝트에 대한 'cef.redist.x86.3.2987.1597' 패키지의 종속성 정보를 수집하려는 중Install-Package : 'https://api.nuget.org/v3/index.json' 원본을 추가할 때 'System.Aggregat..
IOCP ( I/O Completion Port ) Windows I/O Completion Port 에 대한 Jeffrey Richter 의 Windows Via C/C++ 설명을 읽어봤다. 그리고 NHN NEXT 에서 만든 slideshare의 슬라이드를 참고해서 이해한 바를 그림으로 그려 보았다.이런 그림은 없는 것 같은데, 대략 이런 것 같다. 프로그래머가 해 주어야 하는 건, IO CompletionPort 생성하고디바이스 핸들생성후 iocp 와 연결(associate)overlapped I/O request , read//write/send/recv..쓰레드들 생성. 완료된 IO 에서 GetQueuedCompletionStatus 로 하나씩 끄집어내 와서 처리하는 루틴 작성.도표의 중간을 처지하는 os magic 부분, io completion..
[VS] LINK : warning LNK4075: '/INCREMENTAL'이(가) '/LTCG' 사양으로 인해 무시됩니다. https://blogs.msdn.microsoft.com/vcblog/2013/10/29/the-visual-c-linker-best-practices-developer-iteration/ 에서 발췌하여 번역함. LINK : warning LNK4075: '/INCREMENTAL'이(가) '/LTCG' 사양으로 인해 무시됩니다. LINK : warning LNK4075: ignoring ‘/INCREMENTAL’ due to ‘/LTCG’ specification 링크타임 코드생성 (/LTCG , `L`ink-`T`ime `C`ode `G`eneration) 옵션은 링커에게 전체 프로그램 최적화를 하게 한다./LTCG 로 활성화되는 최적화의 흔한 예는 모듈간의 함수 인라인화이다. 많은 기타 링커 최적화..
DWORD PTR fs:[0] 는 무엇인가? https://answers.yahoo.com/question/index?qid=20070424201345AAXWrs7 질문: DWORD PTR fs:[0]? fs 는 무엇인가? DWORD PTR ds:[0] 도 본 적이 있다.ds 는 데이터 세그먼트부터의 오프셋인 것 같은데. ---답변: FS 는 IA-32 프로세서류의 또다른 세그먼트 레지스터이다.win32 환경에서는, 쓰레드의 TEB (Thread Environment Block)의 여러 아이템들을 가리키는 데 사용된다. FS[0] 은 SEH(Structured Exception Handler, 구조적 예외처리) 체인을 가리킨다. 프로그램은 FS[0] 을 새로운 SEH 구조를 가르키도록하여 기본 예외처리기가 아닌 예외처리기를 사용할 수 있다. 자세한..