본문 바로가기

운동하는 개발자/c++

(22)
MFC 다른 솔루션의 Dialog 복사 방법 Visual Studio 다른 솔루션에 있는 Dialog를 복사하는 방법이다.참고로 다른버전의 Visual studio 솔루션에 Dialog도 복사가 된다.아래 예시는 2022버전의 솔루션으로 2015 버전의 다이얼로그를 복사하는 방법1. 위와같이 2015에 있는 DialogCopy1 솔루션의 IDD_DIALOGCOPY1_DIALOG를 복사하려고 한다. 2. 2022에 있는 DialogCopy2 솔루션으로 옮길 예정이다. 3. visual studio를 실행하는데 아무것도 열지 않고 실행한다. (Continue without code) 4. File -> Open -> File 순서로 들어가서 각각 솔루션의 .rc파일을 연다. 5. 복사할 솔루션.rc에서 다이얼로그를 선택하여 우클릭 복사 혹은 컨트롤+c를 누른다. 6. 다음과 ..
MFC char* to Hex (부제 : DLL의 응답 값 변환하여 로그 찍기) 외부 DLL을 사용하면 문자열을 주로 char* 타입으로 전달한다.이때 인코딩 타입을 알 수 없기에 Visual studio에서 사용되는 CP949로 바로 받으면 한글이 깨지는 현상이 발생하며프로젝트 타입에 따라 모든 문자가 깨질 수 있다.이때 우선 데이터를 정상적으로 수신하였는지 확인하기 위해서는 char*으로 넘어온 값을 hex로 변환해보는것이다.#include #include #include #include // For CString#ifdef _MSC_VER // Include only if compiling with Microsoft Visual C++#include #elsetypedef std::string CString; // Define CString as std::string for ..
MFC] 프로세스에 연결할 수 없습니다. 지정된 파일을 찾을 수 없습니다. VS2005에서 실행 중인 프로세스에 디버깅을 하기 위해 "'디버깅->프로세스에 연결'을 사용하였는데 "프로세스에 연결할 수 없습니다. 지정된 파일을 찾을 수 없습니다." 라는 에러가 발생하였다다시 디버그파일을 옮겨보고 IDE를 껏다 켜보고 했지만 동일했고 원인은 바이너리가 C:\ 경로에서 동작중이였기에 관리자 권한이 필요한 것이었다.IDE를 껐다가 관리자권한으로 실행해 주고 다시 프로세스연결을 하니 정상적으로 연결되었다.VS와 C++은 유독 에러내용을 엉뚱하게 많이 보여주는거같다.
C++로 Windows 환경에서 코드 동작 시간 체크 (feat. GetTickCount64의 오류) 코드를 작성하여 테스트하던 중 생각보다 속도가 느려서 어디서 시간이 딜레이되는지 확인해야 하는 경우가 종종있다. 기존 사내 프로젝트 전임자의 코드에서 GetTickCount64()를 쓴 흔적이 있길래 그대로 사용하여 로그를 찍어봤더니 대부분의 코드에서는 0ms으로 찍히나 일부 로그가 15~17ms로 찍히는것이 확인되었다. 대부분 같은 구간에서 찍혀서 해당 시간이 실제인줄 알았으나... GetTickCout64()는 IRQ(Interrupt Request) 즉 인터럽트 처리 시간이 발생하여 해당 로그가 찍힌것이였다. 이후 찾아보니 GetTickCout64()는 20ms이내의 수행시간일 경우 오차범위가 존재하였다. 나는 초당 60프레임의 비디오 데이터를 처리하는 로직을 테스트 중에 있었기에 16ms이내의 시..
Visual studio Stack overflow (Stack Reserve Size) 타 팀의 요구하상으로 간단한 툴을 만들어서 전달해 주려는데 특정 함수 진입 시 Stack overflow가 나면서 프로그램이 종료되었다. 그동안 경험에 의해서는 보통 호출하는 쪽에서 정리안된 메모리가 충돌한다던가 하는 문제였었기에 호출하는 쪽만 죽어라 찾아봤는데 아무리 봐도 원인을 찾을 수 없었다. 그래서 혹시나 싶어 호출 되는 함수에서 특정 기능들을 하나씩 지워가며 테스트해본 결과 char 배열의 선언을 지우니 정상작동했다. ?????????? GPT에서도 해당 코드는 문제가 없다고 하는데.. 찾아보니 visual studio에서 제공하는 stack의 크기는 디폴트로 1MB였던것이다 아래 예시코드처럼 작성하게되면 해당 에러가 발생하게 된다 이 설정은 프로젝트 옵션에서 Linker-> All Option..
Beakjoon] 절댓값 힙 구현하기 (백준 11286 코테) = 우선순위 문제주소 : https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 풀이 : 연산의 개수때문에 O(n^2의 연산속도의 알고리즘으로 해결하면 안된다. O(nlogn) 시간복잡도의 알고리즘으로 풀어야 하며 값을 입력받으면서 바로바로 조건에 맞게 정렬시켜야 한다. 우선순위 큐를 이용하되 순서의 조건이 까다롭기에 조건을 직접 알려줘야한다. 코드는 아래 숨김 더보기 #include #include #include struct MyQueue..
LNK2038: mismatch detected for ‘_ITERATOR_DEBUG_LEVEL': value ‘0’ doesn’t match value ‘2’ Visual studio를 사용하여 컴파일을 하다 다음과 같은 메세지를 접하게 되었다 찾아보니 참조하는 lib은 릴리즈로 빌드되어 있는데 메인 프로젝트인 exe는 debug로 빌드하려고 하면 발생한다고 한다 외부에서 가져온 lib이라면 디버그 혹은 릴리즈에 맞는 파일을 가져와서 추가하여 빌드해 주면 해결된다 https://learn.microsoft.com/en-us/cpp/standard-library/iterator-debug-level?view=msvc-170&redirectedfrom=MSDN _ITERATOR_DEBUG_LEVEL Learn more about: _ITERATOR_DEBUG_LEVEL learn.microsoft.com 나의 경우엔 한 솔루션 내에 여러 개의 프로젝트가 존재했는데..
CString to char* (UTF8) MFC의 CString을 사용하다가 서드파티 라이브러리라던가 Winapi를 사용하며 char*로 변환해야 하는 일들이 있다 이때 한글이 들어가 있다면 (char*)(LPCTSTR) 이런 강제 형변환으론 정상적으로 한글이 전달되지 않는다 대부분의 WinApi나 서드파티 라이브러리들은 UTF8을 지원하기에 이로 변환해줘야 한다 (물론 visual studio에서 디버깅하면 한글이 보이진 않는다) CString tempPath = L"c:\user\홍길동\temp"; char* transStr = CW2A(tempPath, CP_UTF8);​