C++/CX 와 C++/WinRT 같은 프로젝트에서 사용하기

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를 써야하는건지 의문이다.
이거 아직 갈 길이 멀어 보이는데?


C++/CX 와 C++/WinRT 같은 프로젝트에서 사용하기”에 대한 답글 4개

  1. 안녕하세요 영천님 글을 보면서 Directx엔진을 만들고 있습니다.
    제가 서버도 같이 작업을 하고 있는대요 DirectxMath 라이브러리를 서버에서 사용을하면 괜찮을까요? DirectxMath 가 xm레지스터를 사용해서 속도가 빠르다고 들었는데
    이점을 이용해서 서버에서도 사용을하면 다른 수학함수 쓰는거보다 빠를거같은대 영천님의 생각을 듣고 싶습니다.

    좋아요

      1. 답글 남겨 주셔서 감사합니다.
        질문글 남기고 이리 저리 찾아보면서 왜 빠른지에 대한 해답을 얻었습니다.
        기술에 관한글 올리실때마다 열심히 보고 공부하고있습니다. 감사합니다.

        좋아요

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중