사실 이 내용은 WinUI3에 국한된 것은 아니지만, 여기서 실행시켜볼 거니까 카테고리를 여기로 작성했다.
우선, Visual Studio Installer에 들어가서 "C++를 사용한 데스크탑 개발" > "v143 빌드 도구에 대한 C++/CLI 지원(최신)"을 선택하고 다운받는다.

그 다음, WinUI3 프로젝트를 하나 만들었다. 꼭 WinUI3가 아니어도 된다. 다만 나는 이걸로 돌려볼거라 WinUI3를 사용했다.
또, 솔루션에 새 프로젝트를 추가한다. 아래 사진과 같이 c++로 맞춰놓고 "clr"을 검색하면 여러 개가 나온다.

그 중 나는 CLR 클래스 라이브러리(.NET)을 골랐다. WinUI3의 대상 프레임워크가 .NET 6.0이기 때문이다. 무슨 프로젝트를 열건 대상 프레임워크를 잘 확인하여 골라주면 된다.

그리고 WinUI3나 CLR 프로젝트를 추가할 때나 대상 프레임워크를 선택하지 못한다. 따라서 둘의 타겟이 다르면 서로 연동이 안 된다. 속성 탭을 들어가 둘의 대상 프레임워크를 맞춰주자.
왜인지는 모르겠으나, WinUI3의 대상 프레임워크를 바꾸면 실행이 안 된다... 안 되는 건지 내가 이때의 실행방법을 모르는건지, F5를 누르면 돌아가야 하는데, 이걸 바꿨다가 실행이 안 되는 상황을...
CLR 라이브러리를 바꾸는 게 낫다. 괜히 WinUI3의 대상 프레임워크를 바꾸지 말자.


c++ 프로젝트의 헤더파일(아마 본인이 설정한 프로젝트 이름일 것이다)에 다음과 같이 작성해봤다. 클래스까지는 템플릿이다. public: ~~ 만 작성했다.
namespace ClassLibrary1 {
public ref class Class1
{
public:
int add(int a, int b);
};
}
ClassLibrary1.cpp다. include는 자동으로 되어있고, add만 만들었다.
#include "pch.h"
#include "ClassLibrary1.h"
int ClassLibrary1::Class1::add(int a, int b) {
return a + b;
}
다 작성했다면 저장하고 빌드하면 된다. 이때, 속성에 들어가서 플랫폼을 Win32로 맞추고 빌드해야 한다. 항상 말하는 거 같긴 한데, 나도 모르겠다. 그냥 "안 돌아가는데 이렇게 하면 되더라"다. 맞췄다면 빌드하면 된다.

빌드가 되었다면, 프로젝트 참조 추가를 해주면 된다. App1은 WinUI3 프로젝트다.


아마 있을 것인데, 체크하고 확인 누르면 된다.
없다면, App1(솔루션 이름)\ClassLibrary1(CLR 프로젝트 이름)\ClassLibrary1.vcxproj로 된 파일을 찾아서 선택하면 된다.
다른 블로그는 dll 파일을 찾아보라는데 이 경우는 다른건지 모르겠다. 난 이걸로 해야하던데.
using namespace ClassLibrary1;
// class랑 이런거 저런거 다 생략
private void myButton_Click(object sender, RoutedEventArgs e) {
Class1 Class1 = new Class1();
openButton.Content = Class1.add(1, 3).ToString();
}
MainWindow.xaml.cs에 네임스페이스 추가하고, 기본으로 있던 버튼에 저렇게 코드를 작성해봤다.

실행시키고 클릭하면 4로 잘 바뀐다.
실행은 되었는데, 버튼을 누를 때 에러가 난다면 실행을 x64로 했는지 확인해보라. x86으로 돌려야 동작한다. 이조차도 왜인지 모르겠다... (clr 빌드는 Win32로, WinUI3 프로젝트도 x86으로 실행해야 잘 돌아간다.)

07.21 추가 작성
다음 글에서 더 편리한 것을 발견했다.
이걸 쓴다면 굳이 힘들게 할 필요가 없을 거 같다.
https://junostudio.tistory.com/12
[C#.NET] C# 에서 C++ Windows Runtime Component 사용하기
WinRT (Windows 런타임) 라이브러리를 만들어내면 WinMD (Windows 메타데이터)를 출력으로 내보내며 이것으로 다양한 프로그래밍 언어에서 언어 프로젝션을 사용, 이를 이용 할 수 있습니다. 허나 C++ Wind
junostudio.tistory.com
'C# > WinUI3' 카테고리의 다른 글
[WinUI3] 체스 게임 만들기(2) : 말 선택하기 (0) | 2023.02.10 |
---|---|
[WinUI3] 체스 게임 만들기(1) (0) | 2023.02.06 |
[WinUI3] 창 테두리 없애기, Title, Icon... 그리고 TitleBar. (2) | 2023.02.05 |
[WinUI3] NoResize, 생성 시 창의 크기 (0) | 2023.02.05 |
[WinUI3] FileOpenPicker 사용하여 이미지 불러오기 (0) | 2023.02.04 |