C++/WinRT에 꽤 흥미를 느껴서 점진적으로 C++/CX로 작성한 UWP앱 프로젝트들을 C++/WinRT로 바꿔가기로 마음 먹었다.
그 전에 한가지 해결하고 가야하는데 C++/WinRT프로젝트에서 XAML Designer를 사용할 방법을 찾는것.
C++/CX프로젝트(/ZW스위치 on)에서는 Visual Studio의 XAML Designer에서 XAML코드를 생성하면 정적으로 바인딩할 수 있는 추가의 코드를 생성해준다.
물론 C++/WinRT과는 전혀 호환이 되지 않는다. 단독으로 C++/WinRT만 사용할 경우 XAML Designer는 전혀 사용할 수 없다. 즉 버튼,리스트뷰 등등 컨트롤들을 몽땅 수동으로 코드를 작성해서 배치해야한다.
이건 무리.
어쨌든 C++/CX에선 XAML Designer를 사용할 수 있으니 C++/CX프로젝트를 하나 만들고 그 안에서 WinRT/C++을 사용하면 되겠지 생각했다.
여기서 문제 발생.
C++/WinRT 코드를 빌드하려면 컴파일러 스위치로 /std:c++latest를 지정해야한다.
그런데 이렇게 하면 std::unary_function가 std의 멤버가 아니라는 에러가 뜬다. 찾아보니 C++17부터 빠졌다고 한다. 이거 C++/CX프로젝트 빌드할때 collection에서 물고 들어가는거라 내 맘대로 뺄 방법도 없다.
Stacke Overflow에 보면 C++/WinRT와 C++/CX를 혼용할때 생기는 문제에 대해서 언급되어있는데 이쪽은 해결이 간단하다. 그런데 정작 내가 찾는 문제의 해답은 아니다.
결국 내 기준으론 다소 꿀꿀한 해결책으로 C++/CX와 C++/WinRT를 섞어서 빌드하는데 성공했다.
1. C++/CX UWP프로젝트를 만든다.
2. 프로젝트 설정은 건드리지 않는다.
3. C++/WinRT를 사용할 소스코드를 추가로 생성한다.
4. 방금 추가한 소스코드의 프로퍼티 설정을 열어서
- C/C++ -> Precompiled Header : Not Using Precompiled Headers 로 설정
- C/C++ -> Command Line : /await /std:c++latest 추가
- C/C++ -> General -> Consume Windows Runtime Extension : No로 설정
그리고 namespace가 겹치는 문제가 생길텐데 이건 간단하다. 다음의 링크를 참고한다.
http://stackoverflow.com/questions/39686332/can-c-cx-and-c-winrt-be-used-in-the-same-project
결국 소스코드 파일을 분리해서 각각 다른 컴파일러 스위치를 지정하는 건데 뭐 이렇게까지 불편하게해서 C++/WinRT를 써야하는건지 의문이다.
이거 아직 갈 길이 멀어 보이는데?
안녕하세요 영천님 글을 보면서 Directx엔진을 만들고 있습니다.
제가 서버도 같이 작업을 하고 있는대요 DirectxMath 라이브러리를 서버에서 사용을하면 괜찮을까요? DirectxMath 가 xm레지스터를 사용해서 속도가 빠르다고 들었는데
이점을 이용해서 서버에서도 사용을하면 다른 수학함수 쓰는거보다 빠를거같은대 영천님의 생각을 듣고 싶습니다.
좋아요좋아요
서버에서 사용해도 됩니다.
좋아요좋아요
답글 남겨 주셔서 감사합니다.
질문글 남기고 이리 저리 찾아보면서 왜 빠른지에 대한 해답을 얻었습니다.
기술에 관한글 올리실때마다 열심히 보고 공부하고있습니다. 감사합니다.
좋아요좋아요
넵. 감사합니다.
좋아요좋아요