7. 헤더 파일을 바꿔야 합니다
기본 설정은 #ifdef로 되어있는데
일단 싹 지우신 다음
extern “C” 를 사용합니다
선언한 함수들은 아까 cpp파일에서
구현한 함수입니다
당연히 리턴 타입과 인자도
일치해야 합니다
그리고 DLL을 통해 공유하고 싶은
함수들만 선언해야 합니다
여기선 테스트를 위해 모든 함수를 집어넣었습니다
11. C# 프로젝트 만들기
이렇게 고쳐줍니다
C++에서 나온 DLL 파일이 있는 곳에 C# 프로젝트의 실행 파일을 갖다 놓기 위해서입니다
같은 폴더에서 실행하는 것이 편합니다
12. DLL 가져와서 클래스로 만들기
C# 프로젝트 안에 클래스를 하나
추가시켜 줍니다
그리고
Using System.Runtine.InteropService;
를 추가해 주신 다음
DllImport로 dll에 들어있는 함수를
가져옵니다
CallingConvention을 바꾸지 않으면
PInvokeStackImbalance가 발생합니다
13. DLL 가져와서 클래스로 만들기
• 주의할 점
• Namespace를 잘 봐두세요
• 나중에 가져다 쓸 때 클래스를 못 찾을 수가 있습니다
• C#클래스의 함수는 DLL 에 들어있는 함수, 즉 C++ 파일에서 만든 함수
와 이름이 똑같아야 합니다
• 리턴 타입도 같아야 합니다.
• 함수를 가져올 때 public static extern 을 꼭 앞에 붙여야 합니다
• 예를 들어 void LoadMesh(); 함수를 쓰고 싶다면
• public static extern void LoadMesh();
• 라고 선언해줘야 합니다
14. C# Form 만들기
뭔가 허전합니다
PictureBox 하나 들어있는 form인데요
이번 예제에서는 단추도 별 필요 없습니다
물론 제대로 된 툴로 만들기 위해서는
보다 많은 이벤트를 처리할 수 있어야 합니다
15. C# Form 만들기
PictureBox의 이름을 View로 바꿔줍니다
안 바꿔도 실행에는 문제가 없지만 앞으로 추가될
Item들을 생각하면 미리 이름을 정리해 두는 것이
좋을 것 같네요
16. 구현
이게 끝입니다
C#에서 생성한 클래스가 DirectX 이므로
DirectX.함수명() 형태가 됩니다
몇 군데만 살펴보면,
D3D 초기화를 위해 핸들을 넘겨주는데
This.View.handle.ToInt32()
형태로 넘겨줍니다.
18. 구현
렌더링 할 때 함수를 async로 선언하고
아래쪽에 await Task.Delay(10);을 줬는데
이 둘은 한 쌍으로 비동기 프로그래밍을 위해
사용합니다
생각해보면 화면에 그려주는 작업은 일정한
주기로 계속 반복되어야 하니 비동기로 따로
빼주는 것이 맞습니다