본문 바로가기

운동하는 개발자

(191)
Windows에서 NamedPipe 통신 client 테스트하기 기존에 구축되어 있는 NamedPipe 서버 측에 데이터를 전송하는 테스트가 필요하여 유틸을 찾아보는데 유틸은 안 나오고 죄다 연동방법, 라이브러리 소개만 있었다 이유를 찾아보니 Windows powershell을 통해서 간단하게 테스트가 가능했다... (터미널, cmd 안됩니다) $pipe = New-Object IO.Pipes.NamedPipeClientStream('.', '파이프명', [IO.Pipes.PipeDirection]::Out) $pipe.Connect() //여기서 바로 응답이 안오면 파이프명 다시 확인 $writer = New-Object System.IO.BinaryWriter($pipe) $writer.Write(0x41) //바이트 단위 전송 아스키코드표 보고 'A'전송 혹은 ..
visual studio 2022 여러 블럭 주석 풀기 단축키 기본적으로 주석은 라인전체를 블록지정하거나 특정 범위를 지정해서 "Ctrl+Shift+/"를 누르면 주석 설정이 되고 풀린다 그런데 다음과 같이 주석이 공백라인을 포함하여 두 개 떨어져 있을 경우 전체를 블록지정해도 주석 해지가 되지 않는다 그때는 주석 제거 단축키인 "Ctrl+k+u"를 입력해 줘야 한다 쩝 다른 IDE는 그냥 됐었었는데 귀찮게..
ofstream 정의되지 않은 class 'std::basic_ofstream<char,std::char_traits<char>>'을(를) 사용합니다. 파일 쓰기를 위해서 간단하게 함수 호출을 하였다 std::ofstream output_file(filename, std::ios::binary); 컴파일을 돌려보니 'output_file'은(는) 정의되지 않은 class 'std::basic_ofstream'을(를) 사용합니다. 뭔 소리지 왜 정의되지 않았다고..? 생성자가 바뀌었나 찾아보았으나 동일했고 다른 예제들도 동일하게 사용하고 있었다 생성자를 빼고 선언만 해도 동일하게 에러가 발생했다 찾아보니 include가 빠져서 정의되지 않았다고 뜨는것이였다... 😅 #include 을 넣어줬었는데 실제 필요한 건 #include ​ 이것이었단 것... 끝 C++은 컴파일 오류 메시지부터 너무 불친절해...ㅠ
C++ 윈도우 환경변수 값 획득 (Get Windows Environment Variable Values) C++에서 ofstream 사용 시 path에 윈도우 환경변수(예시 : %appdata%)가 있으면 파일 생성이 되지 않았기에 해당 값을 획득 후 생성해야 했다 std::string 내에 환경변수가 섞여있는 경우의 예제가 없어서 직접 만들었다 std::string ReplaceEnvVar(const std::string& str) { std::string result = str; //문자열에서 환경변수 위치 찾음 std::size_t pos = result.find('%'); while (pos != std::string::npos) { std::size_t endpos = result.find('%', pos + 1); if (endpos != std::string::npos) { std::string..
c++ UTF8 to Euc-kr (UTF8 json 한글 데이터 std::string에 저장하기 + ofstream error) feat boost::locale 웹에서 http통신으로 json 한글이 섞인 데이터를 수신하였는데 UTF-8 타입이였다 이 UTF-8을 그대로 std::string에 넣어서 디렉토리 생성 함수는 정상적으로 동작하였으나 ofstream을 사용하여 파일 open시 에러가 발생하였다.. 디버깅해보니 한글이 들어간 문자열이 디버깅 환경에서 보이지 않았고 라는 문구를 보여주었다 물론 바이트별로 데이터를 볼 수 있었지만 한글은 ?? 로 표시되었으며 한 글자당 3바이트로 표현되고있었다 원인을 찾아보니 내 visual studio 2022환경에서는 디폴트로 코드페이지에 의해 EUC-KR이 기본이 되는거 같았다 코트페이지를 변경하거나 뭔가 다른방법이 있겠으나... 코드를 공유하는 같은 팀원들도 같은 이슈를 발생할 수 있다고 생각되서 UTF8을 EUC-..
Visual studio c++ fatal error C1128: 섹션 수가 개체 파일 형식 한도를 초과했습니다. /bigobj를 사용하여 컴파일하십시오. boost::asio를 사용하여 https 통신을 개발하고 있었는데 다음과 같은 에러가 발생했다 fatal error C1128: 섹션 수가 개체 파일 형식 한도를 초과했습니다. /bigobj를 사용하여 컴파일하십시오. 해결책은 단순히 /bingobj 옵션만 추가해서 컴파일 하면 되는 것인데 원인이 궁금했다 우선 바쁘신분들을 위한 해결책 프로젝트 속성 -> 구성 속성 -> C/C++ -> 명령줄 여기서 추가 옵션에 /bigobj를 넣으면 끝! 이어서 찾아본 원인을 얘기해 보자면 우선 공식 MS에 답변이다 출처 : https://learn.microsoft.com/ko-kr/cpp/build/reference/bigobj-increase-number-of-sections-in-dot-obj-file?vie..
c++ boost를 이용한 json 파싱 (boost::json & boost::property_tree) boost library를 사용하여 json 데이터를 파싱 하는 법을 찾아보니 두 가지 라이브러리가 있었다 둘 다 해더만 추가해서 간단하게 사용하는 방식이였고 자료는 property_tree 이게 압도적으로 많았고 boost::json은 잘 안 쓰이는지 예제 코드가 많이 없었다 특히 array내부의 값을 획득하는 예제를 찾는데 힘들었다 왜 동일한 기능의 라이브러리가 두가지로 나눠져 있나 궁금하여 찾아보았다 boost::property_tree가 먼저 나왔으며 이는 트리구조로 JSON뿐만 아니라 XML, INI를 읽을 수 있다 정확히는 JSON을 파싱 하는 용도라기보단 트리구조로 다양한 형식의 데이터를 처리하기 위한 라이브러리이다 다음 boost:json의 경우에는 목적 자체가 JSON데이터를 처리하기 위..
개발자가 보는 한글 번역기 비교 (Google translate, Papago, DeepL, ChatGPT) 기존에는 구글번역과 파파고를 주로 사용했었는데 최근 DeepL이라고 세계적으로 유명한 번역기에서 한글을 지원한다고 하여 사용해 보았다 DeepL은 특히 뛰어난 AI를 통해 문맥을 이해하며 번역하고 사람이 말하는 것처럼 번역해 준다며 홍보했었다 그 홍보대로 "안녕 2022, 안녕2023"을 번역해 보았다 유일하게 DeepL만 문맥을 이해하고 완벽하게 번역하였다 이 블로그 주인은 개발자이기에 주로 변역해야 하는 것은 해외 라이브러리 공식문서라던가 주로 개발 문서를 번역해서 본다 과연 개발 용어도 잘 이해하며 해석할까? Google의 c++ Style guide 내용의 일부를 번역해 보자 거의 비슷하게 번역되나 "변수 이름과 마찬가지로" 부분을 구글이나 파파고는 "변수이름만큼"이라고 어색하게 해석된 차이가 눈..