Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

C# 뉴비를 위한 맛보기 2

비주얼 스튜디오 짱짱

Audiolibros relacionados

Gratis con una prueba de 30 días de Scribd

Ver todo
  • Sé el primero en comentar

C# 뉴비를 위한 맛보기 2

  1. 1. C# 맛보기 2 C++에서 만든 DLL을 어떻게 C#에서 쓸 것인가
  2. 2. 들어가기 전에 • 미리 알아야 할 것 • C++ DirectX 프로젝트 만들기 • C++ DLL 만들기 • 별로 안 어렵습니다!
  3. 3. C++ DLL 프로젝트 만들기 설정을 이렇게 맞춰줍니다 DLL 파일을 만들 것이고 추가 옵션에서 내보내기 기호를 골라줍니다
  4. 4. C++ DLL 프로젝트 만들기 DX SDK가 미리 설치되어야 합니다 경로를 추가해줍니다
  5. 5. C++ DLL 프로젝트 만들기 링커  추가 종속성 d3d9.lib d3dx9d.lib dxerr.lib dxguid.lib winmm.lib 얘네들을 추가해줍니다
  6. 6. DirectX Tutorial 중에서 아무 거나… • 소스를 Copy & paste 해 줍니다 • 물론 직접 짜셔도 됩니다
  7. 7. 헤더 파일을 바꿔야 합니다 기본 설정은 #ifdef로 되어있는데 일단 싹 지우신 다음 extern “C” 를 사용합니다 선언한 함수들은 아까 cpp파일에서 구현한 함수입니다 당연히 리턴 타입과 인자도 일치해야 합니다 그리고 DLL을 통해 공유하고 싶은 함수들만 선언해야 합니다 여기선 테스트를 위해 모든 함수를 집어넣었습니다
  8. 8. 컴파일을 한 번 해 볼까요? 잘 됩니다 여기서 막히면 다음 과정이 불가능합니다 
  9. 9. C# 프로젝트 만들기 C++ 프로젝트가 있는 솔루션에다가 C# 프로젝트를 추가시켜줍니다!
  10. 10. C# 프로젝트 만들기 1 2 3 생성된 C# 프로젝트를 우클릭  속성  빌드  출력 항목으로 가 봅니다.
  11. 11. C# 프로젝트 만들기 이렇게 고쳐줍니다 C++에서 나온 DLL 파일이 있는 곳에 C# 프로젝트의 실행 파일을 갖다 놓기 위해서입니다 같은 폴더에서 실행하는 것이 편합니다
  12. 12. DLL 가져와서 클래스로 만들기 C# 프로젝트 안에 클래스를 하나 추가시켜 줍니다 그리고 Using System.Runtine.InteropService; 를 추가해 주신 다음 DllImport로 dll에 들어있는 함수를 가져옵니다 CallingConvention을 바꾸지 않으면 PInvokeStackImbalance가 발생합니다
  13. 13. DLL 가져와서 클래스로 만들기 • 주의할 점 • Namespace를 잘 봐두세요 • 나중에 가져다 쓸 때 클래스를 못 찾을 수가 있습니다 • C#클래스의 함수는 DLL 에 들어있는 함수, 즉 C++ 파일에서 만든 함수 와 이름이 똑같아야 합니다 • 리턴 타입도 같아야 합니다. • 함수를 가져올 때 public static extern 을 꼭 앞에 붙여야 합니다 • 예를 들어 void LoadMesh(); 함수를 쓰고 싶다면 • public static extern void LoadMesh(); • 라고 선언해줘야 합니다
  14. 14. C# Form 만들기 뭔가 허전합니다 PictureBox 하나 들어있는 form인데요 이번 예제에서는 단추도 별 필요 없습니다 물론 제대로 된 툴로 만들기 위해서는 보다 많은 이벤트를 처리할 수 있어야 합니다
  15. 15. C# Form 만들기 PictureBox의 이름을 View로 바꿔줍니다 안 바꿔도 실행에는 문제가 없지만 앞으로 추가될 Item들을 생각하면 미리 이름을 정리해 두는 것이 좋을 것 같네요
  16. 16. 구현 이게 끝입니다 C#에서 생성한 클래스가 DirectX 이므로 DirectX.함수명() 형태가 됩니다 몇 군데만 살펴보면, D3D 초기화를 위해 핸들을 넘겨주는데 This.View.handle.ToInt32() 형태로 넘겨줍니다.
  17. 17. 구현 DirectX.cs Main 핸들이 인트값이라는 점을 이용해 C++ 자료형이 아니라도 넘겨줄 수 있는 것입니다 아까 불러올 때 Int32를 인자로 받게 선언했습니다
  18. 18. 구현 렌더링 할 때 함수를 async로 선언하고 아래쪽에 await Task.Delay(10);을 줬는데 이 둘은 한 쌍으로 비동기 프로그래밍을 위해 사용합니다 생각해보면 화면에 그려주는 작업은 일정한 주기로 계속 반복되어야 하니 비동기로 따로 빼주는 것이 맞습니다
  19. 19. 결과 잘 뜹니다!

×