unicode 환경 컴파일 작업중 ansi 파일을 읽고 쓰는 부분을 unicode에서 읽고 쓰기가 되도록 수정 하다보니

검색해보면 대부분 BOM을 사용하는것으로 검색이 된다.


하지만 내가 필요한 내용은 BOM이 없는 파일에서 utf-8 포맷의 텍스트 파일을 읽는것이라서

다음과 같은 방식으로 수정을 했다.



CString strBuffer; // 실제 작업용 버퍼
CStringA szFileBuffer; // 파일에서 읽어들일 버퍼

CString strFilePath;
strFilePath = _T("test.txt");

CFile   hFile;
DWORD n;
if(hFile.Open(strFilePath,CFile::modeRead)){
    n = (DWORD)hFile.GetLength();
    n = hFile.Read(szFileBuffer.GetBuffer(n), n);
    szFileBuffer.ReleaseBuffer(n);
    hFile.Close();
}
// utf-8 파일 내용을 unicode로 변환
strBuffer = CA2T(szFileBuffer, CP_UTF8);

// 이후 로직 처리

//파일 저장
if(hFile.Open(strFilePath,CFile::modeCreate | CFile::modeWrite )){
    // unicode 문자열을 utf-8로 변환
    szFileBuffer = CT2A(strBuffer, CP_UTF8);
    sf.Write(szFileBuffer, szFileBuffer.GetLength());        
    hFile.Close();
}


unicode에서도 CFile 은 BOM 이 없으면 ansi 형식으로 데이터를 읽으므로 CStringA를 사용하도록 하는것이 핵심!!


'지식창고 > 프로그램' 카테고리의 다른 글

firefox Dns over HTTPS (DOH) 적용 하기  (0) 2018.05.17
nginx post 405 not allow 문제  (0) 2016.11.24
크롬 마우스 제스쳐 확장  (0) 2016.09.21
ConEmu 설정  (0) 2016.08.31
Laravel - 기본 라우팅  (0) 2015.05.19

vs2008을 10여년간 사용하다 vs2019를 사용하게 되어 boost를 설치 하려고 알아보니 vcpkg라는것이 있다고 하여

이런 저런 삽질을 진행한 결과를 정리한다.


참고 문서는 MS공식 문서가 제일 좋다.

vcpkg: a C++ package manager for Windows, Linux, and MacOS


설치

vcpkg를 설치할 경로에서 파워쉘을 실행하고 다음의 명령을 실행한다. GIT이 설치되어 있어야한다.


// vcpkg  저장소 clone
git clone https://github.com/microsoft/vcpkg.git
// 빌드
PS>./bootstrap-vcpkg.bat


빌드가 완료되면 vcpkg를 실행해볼 수 있다.

// 사용가능 패키지 검색
vcpkg search boost

//  visual studio 연동 설정
vcpkg integrate install

// 파워쉘에서 자동완성을 지원해준다고 하는데 어떻게 사용하는지 아직 확인 불가
vcpkg integrate powershell


이렇게 환경을 구성했으면 triplet 에 대해서 알아야 한다.


x86-windows : dll 로 사용한다.

x86-windows-static : lib로 사용한다 MT 옵션 컴파일

x86-windows-static-md : lib로 사용한다. MD 옵션 컴파일


boost를 static link 하려면 다음과 같이 설치 한다.

vcpkg install boost:x86-windows-static-md


Visual studio 에서는 x86-windows가 기본값으로 되어 있어서 static 으로 사용하려면 vcxproj 파일을 열고 다음과 같이 설정을 추가 해야한다.

<PropertyGroup Label="Globals"> 항목을 찾아서 아래쪽에 추가한다.


<PropertyGroup Label="Globals">
  <!-- .... -->
  <VcpkgTriplet Condition="'$(Platform)'=='Win32'">x86-windows-static</VcpkgTriplet>
  <VcpkgTriplet Condition="'$(Platform)'=='x64'">x64-windows-static</VcpkgTriplet>
</PropertyGroup>

처음에 dll 모드로 boost를 사용했더니 memory leak이 발생하였는데 이런때는

링커-입력-지연 로드된 DLL 에 boost의 dll을 지정해주면 된다.

오픈소스들중에 이런 문제가 종종 있는것 같다.

참고 링크 : https://stackoverflow.com/questions/9232837/how-to-remove-memory-leaks-between-opencv-1-1-and-mfc-6-0-without-linking-mfc-as


프로젝트 configuration이 Debug, Release 가 아닌 다른 이름이라면 이에 대한 설정도 별도로 해야 한다.

https://github.com/microsoft/vcpkg/blob/master/docs/about/faq.md#can-i-get-vcpkg-integration-for-custom-configurations


<PropertyGroup>
  <VcpkgConfiguration Condition="'$(Configuration)' == 'MyRelease'">Release</VcpkgConfiguration>
</PropertyGroup>



ps.

파워쉘 자동완성 기능은 윈도우 기본 탑재 파워쉘에서는 정상 동작 하지 않는다.

powershell7 을 설치 해보니 자동 완성이 잘 동작 했다.


2020.06 버전 부터는 static link 사용 방법이 달라졌다.


윈도우 10 2004 버전에서 WSL2를 지원하면서 docker desktop에서도 지원을 시작 하였다.


WSL2를 사용할 계획이 있다면 별도의 활성화 명령을 실행시키지 말고 도커설치를 권장합니다.

아주 편리하게 WSL2가 활성화 됩니다.


윈도우 10 버전이 2004 인지 확인한다. 아마도 시스템이 hyper-v 구동이 되는 가상화 지원이 되어야 할 것 같습니다.


설치 파일을 다운로드 받고 설치를 시작한다.
https://www.docker.com/products/docker-desktop


WSL2 체크를 확인한다.

설치 진행중

설치가 완료되면 재시작

로그인 하면 도커가 구동된다.

WSL2 커널 업데이트 안내 창이 실행되면 업데이트를 진행한다.


업데이트 하고 재부팅을 하면 도커가 구동되고 사용법이 안내된다. 이를 따라해보려면 GIT이 설치 되어 있어야한다.


버튼을 클릭하면 명령이 입력되어 실행된다.

받은 소스를 기반으로 이미지 빌드

빌드된 이미지 실행

localhost로 접속이 된다.


구동중인 컨테이너를 관리할 수 있다.


항상 도커를 사용할 계획이 아니라면 Start Docker Desktop when you log in 체크를 해제한다.