마이크로소프트에서 수년간 유지해온 Win32 API를 밑에 두고 대 모바일 시대에 다양한 디바이스에서 일괄적인 인터페이스를 제공하기 위해 만든 Windows Runtime 라이브러리를 C++인터페이스로 사용할 수 있게 되었다.
그것이 바로 C++/WinRT .
https://docs.microsoft.com/ko-kr/windows/uwp/cpp-and-winrt-apis/intro-to-using-cpp-with-winrt
Win32 애플리케이션만 만들어온 개발자로써 좀 이해가 가지 않는다.
빠른빌드 속도, C++ 17표준, 최소화된 의존성 등..장점이 많지만 궁극적으로 이걸 왜 써야하는가에 대한 의문은 해소되지 않는다.
굳이 이유를 생각해보자면 마이크로소프트가 윈도우8시절 삽질의 결과로 남겨진 WinRT를 살리고자 Windows Runtime으로 남겨 두었고 (이것이 그렇게 쓸모 없는건 아닌지라..) 대 모바일, 크로스플랫폼 시대에 걸맞게 다양한 언어에서 접근 가능하도록 만들었다...
그리고 C++에서 접근할 수 있게 만든게 c++/winrt?
그 활용예로 윈API를 사용하지 않고 노트북 배터리 정보를 구할 수 있다..
#include "pch.h"
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Devices::Enumeration;
using namespace Windows::Devices::Power;
int main()
{
winrt::init_apartment();
std::wcout.imbue(std::locale("korean"));
Battery battery{ Battery::AggregateBattery() };
hstring device_selector{ battery.GetDeviceSelector() };
BatteryReport report{ battery.GetReport() };
const std::array<const wchar_t*, 4> str_BatteryStatus{ L"NoPresent", L"Discharging", L"Idle", L"Charging" };
int RemainingCapacityInMilliwattHours = report.RemainingCapacityInMilliwattHours().GetInt32();
int FullChargeCapacityInMilliwattHours = report.FullChargeCapacityInMilliwattHours().GetInt32();
int DesignCapacityInMilliwattHours = report.DesignCapacityInMilliwattHours().GetInt32();
float remained_power = ((float)RemainingCapacityInMilliwattHours / FullChargeCapacityInMilliwattHours * 100.0f);
std::wcout <<L"Full Charge Capacity : " << FullChargeCapacityInMilliwattHours <<L"W/h" << std::endl;
std::wcout << remained_power <<L"% charged. status:" << str_BatteryStatus[static_cast<int>(report.Status())] << std::endl;
return 0;
}
이렇게 windows runtime에는 다양한 API가 존재 하는데... (카메라에 접근한다던지, OCR라이브러리를 사용한다던지.. 이미지 처리를 한다던지..) 이런 것들을 Desktop APP에서도 이제 사용 가능하다는데 의의가 있지 않을까?.
참고
https://potisan-programming-memo.hatenablog.jp/entry/2021/01/24/161219
'개발 > Windows' 카테고리의 다른 글
OpenJDK 다운로드 , 마이크로소프트에서 받자. (0) | 2022.02.25 |
---|---|
[Win32] WM_ERASEBKGND에서 리턴 값의 의미? (0) | 2022.02.24 |
드라이버에서 파일 읽기 예제/ ZwOpenFile ,ZwReadFile (0) | 2020.11.12 |
Windbg 커널디버깅 설정하기 (Network 디버깅) (0) | 2020.07.27 |
UNICODE_STRING 동적할당 하기 / 드라이버개발 (0) | 2020.07.24 |
댓글