본문 바로가기

windows38

[C++/WinRT] 윈도우C++프로젝트에서 json파싱하기 C++로 작성된 MFC, Win32프로젝트에서 json을 다룰 때 고민이 많다. 나 같은 경우 보통은 jsoncpp를 활용해서 json을 파싱한다. 하지만 precompiler를 설정하지 못해 빌드속도가 늦어지거나 jsoncpp를 사용하는 다른 라이브러리들과 심볼 충돌 등의 문제가 있을 수 있는 문제가 있다.요새 윈도우 프로젝트를 하면서 cpp winrt를 유심히 보고 있다 async와 같은 스레드 처리를 쉽게 할 수 있기도 하고 모던한 Windows앱을 만드는데 도움이 되기 때문이다. 이제 win32만으로는.. 꽤 편리하게 사용될 수 있는 winrt클래스 중 하나인 JsonObject를 이용해 서드파티 라이브러리 없이 cpp winrt로 json을 파싱할 수 있다.https://learn.microso.. 2024. 11. 23.
[WTL] Visual studio 2022에서 WTL Wizard 설치하기 Windows7은 이제 지원종료되어 Windows 10 이하 버전은 지원하지 않아도 되는 시대가 되었다. 그에 따라 Visual Studio 2019를 굳이 써야할 이유도 없다. Visual Studio 2022로 가자.그런데 하나 걸리는게 WTL이다. WTL은 프로젝트 템플릿없이 nuget package로 쓸 수 있지만 기왕이면 프로젝트 템플릿이 자동으로 생성되면 시작하기 편해 좋을 것이다.기존처럼 Visual studio 2022가 설치 된 상황에서 WTL 템플릿 마법사(WTL10_10320_Release 기준)를 설치하면 정상적으로 동작하지 않는다.좀 찾아보니 아직 release에 merge는 안되었지만 vs2022대응 스크립트가 커밋되어 있었다.https://sourceforge.net/p/wtl.. 2024. 8. 26.
[WinUI3/c++] 창 사이즈 변경하기 기존 Win32 애플리케이션 개발환경에서 WinUI3로 넘어갈 수 있을까 몇가지 기술들을 공부해보고 있다. 이번에는 가장 기본적인 창사이즈 조절이 가능하냐를 검증해본다. 기존 Win32개발 환경에서는 MoveWindow와 같은 함수로 창 사이즈 변경이 가능했다.Winui3에서 창 사이즈 변경은 어떻게 할 수 있을까?일단 기본 winui3 템플릿을 그대로 실행하면 창사이즈가 크게 실행된다.MSDN에서 찾아본 바로는 AppWindow객체의 Resize함수를 통해 크기 조절이 가능하다고한다.https://learn.microsoft.com/ko-kr/windows/windows-app-sdk/api/winrt/microsoft.ui.windowing.appwindow.resize?view=windows-app.. 2024. 8. 17.
[WinUI3] WinUI3 써먹을 수 있을까? 여러 보안솔루션을 개발하다보면 하위호환성을 위해 최신 기술을 포기해야한다. 고객사는 구버전 OS를 지원하기를 원하며, 그것은 우리 솔루션의 장점이 될 수 있기 때문이다. 그렇게 언제나 익숙한 닳고 닳은 MFC기반 프로젝트들을 고수해왔다. 그렇게 WPF, Winform등 써먹기 좋은 기술들은 아에 처다도 안본 채.아무리 그래도 2024년 신규 프로젝트에 MFC를 들고 가는건 또 다른 레거시 지옥을 낳는게 아닐까 싶다. (MFC는 1992년에 공개되어 아직까지 문제없이 잘 써먹고 있다.)Microsoft는 UWP, Winui2 등 삽질 끝에 Winui3이라는 최신 UI Framework를 내놓았다. 과거 UWP와 다르게 Desktop앱에도 적용 가능하고, MFC, Win32로 짜여진 프로그램에도 이식할 수 .. 2024. 5. 26.
WSL에서 USB장치 연결하기(usbipd-win) Windows에 WSL기능이 추가되면서 Linux를 윈도우에서 사용할 수 있게 되었다. 그런데 WSL이 완전한 Linux는 아니기 때문에 여러가지 제약사항이 존재하는데 바로 USB 장치를 연결하는 것이다. 하지만 이것도 찾아보니 가능한 작업이었다. 이번 포스트에서는 WSL에 USB장치를 연결하는 법을 알아보자. WSL에서 USB장치를 연결하는 것은 오픈소스 프로젝트인 usbipd-win이라는 프로젝트로 가능하다. 0. 환경 WSL에서 USB장치를 연결하기 위해서는 다음과 같은 요구사항이 있따. Windows 11 이상(혹은 WSL2가 활성화된 Windows10) x64/x86 CPU(ARM은 지원하지 않아요) WSL2에 설치된 Linux.(커널 5.10.60.1 이상) 참고로 Linux 커널 버전은 un.. 2022. 12. 18.
[Win32] 윈도우의 닫기 버튼을 눌렀을 때 일어 나는 일 (WM_CLOSE) 이번 포스트에서는 Win32 GUI프로그래밍을 공부하면서 거의 처음으로 배우는 내용인 윈도우가 닫힐 때 일어나는 일에 대해서 알아보겠다. 쌩으로 Win32부터 MFC, WTL까지 하다보니 좀 오래전에 공부해서 인지 가물가물하여 다시한번 리마인드 차원에서 정리해본다. Windows에서 창의 닫기 버튼을 눌렀을때 어떤일이 발생할까? 사용자가 닫기창이 눌렸을 때, 개발자는 많은 것을 고려해야 할 수 있다. 단순히 창을 hide할 것인지, 정말로 프로그램을 종료할 것 인지? 종료한다면 메모리정리, 리소스 정리, 사용자가 작업한 내용, 프로그램의 상태등을 안전하게 정리할 것인지 고려 해야 할 수 있을 것 이다. 닫기동작은 나름 그래서 중요하다고 생각한다. 그럼 닫기 버튼을 눌렀을 때 어떤 일이 발생할까? http.. 2022. 7. 31.
Swift 삽입정렬, 선택정렬, 퀵 정렬 Swift 언어에 좀 익숙해 보고자 알고리즘에서 제일 처음에 나오는 정렬 코드를 짜보았다. 간단하게 함수, 배열, 조건문, 반복문 등을 익일 수 있었다. 1. 삽입정렬 func insertionSort(arr: inout [Int]) { for i in 1 .. 0 && arr[j - 1] > key { arr.swapAt(j - 1 , j) j-=1 } arr[j] = key } return } 2. 선택정렬 func selectionSort(arr: inout [Int]) { for i in 0 ..< arr.count { var min = i for j in i ..< arr.count { if arr[min].. 2022. 7. 3.
HIWORD, LOWORD 매크로, DWORD 쪼개기 Windows 프로그래밍을 하다보면 32bit 자료형인 DWORD를 쪼개야 할때가 생긴다. 예를 들면 WM_LBUTTONDOWN와 같은 마우스 메시지의 lParam변수에는 마우스 좌표가 들어 있는데, X축은 하위 16비트, Y축은 상위 16비트에 존재 한다. 이때 상위, 하위 16비트를 쪼개어야 X축 Y축을 알 수 있다. 그렇다면 대충 코드 비트연산을 다음과 같이 할 수 있을 것이다. DWORD dwXPos = ((((DWORD)lParam)) & 0xffff); DWORD dwYPos = ((((DWORD)lParam >> 16)) & 0xffff); 이렇게 할 수 있지만 상당히 거추장스러운 코드 처럼 보인다. 이렇게 가독성이 떨어지는 코드를 막기위해 Windows SDK에서는 매크로를 정의해 놓았다... 2022. 6. 16.
OpenJDK 다운로드 , 마이크로소프트에서 받자. 최근 OpenJDK를 윈도우에 설치할 일이 생겼었다. 윈도우에서 JDK를 설치하려면 압축을 풀어서 적절한 경로에 넣고 환경변수를 일일히 잡아줘야 하는게 일반적이다. OpenJDK를 공식으로 배포하는 공식 홈페이지에서는 zip파일 형태로 배포하기 때문에 마냥 귀찮지 않을 수 없다. 또 Pre빌드 해놓은 깃허브도 존재하는데 이것도 좀 믿기힘들다. https://jdk.java.net/archive/ Archived OpenJDK GA Releases Archived OpenJDK General-Availability Releases This page is an archive of previously released builds of the JDK licensed under the GNU General Pub.. 2022. 2. 25.