SlideShare a Scribd company logo
C#으로 게임 엔진 만들기
(1)
김지환
NHN NEXT
목표
• C++/CLI에 대한 간략한 설명.
• C#에서 Native C++ 연동하기. ( Native DLL 이용 )
C++/CLI
• 쉽게 말하면 Unmanaged Code인 C++과 Managed Code인 C# (.NET)의 중간 단계 언어이다.
• 한마디로 Native와 .NET의 중간 지점에서 서로를 연결해 주는 언어이다.
C++/CLI
• C++ 프로젝트에서 Static Library ( .lib )를 생성
• 생성한 Lib를 C++/CLI로 Wrapping해서 DLL 생성
• C#에서 생성한 DLL 사용
http://topnanis.tistory.com/97
C++/CLI
• 나중에 C++/CLI만 다룬 PPT를 다시 만들건데 왜냐 하면, 그 양이 너무 많기 때문입니다.
• 지금은 연습 삼아 아주 간단한 프로젝트를 만들어 봅니다.
C#에서 NATIVE C++ 연동하기
• Wrapping을 거치지 않은 Unmanaged DLL을 C#과 연동하는 방법에 대해서 설명합니다.
• C++/CLI를 이용한 방법은 다음 PPT에 설명하도록 하겠습니다.
C#에서 NATIVE C++ 연동하기
새 솔루션을 생성하고
C# 프로젝트를 추가합니다.
C#에서 NATIVE C++ 연동하기
만들어진 솔루션에 C# 프로젝트가
추가되었습니다.
이제 C++ 프로젝트를 새로 추가해야 합니다.
C#에서 NATIVE C++ 연동하기
C#에서 NATIVE C++ 연동하기
C#에서 NATIVE C++ 연동하기
2개의 프로젝트가 생성되었습니다.
프로젝트 아이콘을 보면
CoreLib는 C++
SimpleCal는 C# 임을 알 수 있습니다.
C#에서 NATIVE C++ 연동하기
다른 프로젝트에서 생성될 DLL과
경로를 맞춰주기 위해서
C# 프로젝트의 세팅을 약간 바꿨습니다.
C#에서 NATIVE C++ 연동하기
마찬가지로 C++ 프로젝트의
DLL 생성 경로를 바꿨습니다.
C#에서 NATIVE C++ 연동하기
CoreLib 프로젝트의 CoreLib.cpp
두 정수를 받아 더한 결과를 반환해주는
Add함수를 작성하였다.
C#에서 NATIVE C++ 연동하기
SimpleCal 프로젝트의 Form1.cs
CoreLib.dll에서 Add함수를 불러와 호출.
C#에서 NATIVE C++ 연동하기
프로젝트를 빌드하고 실행하면
MessageBox.Show( DLL.Add(1,2).ToString() );
구문에서 호출된 Add(1,2)의 반환값인 3이 표시된다.
C#에서 NATIVE C++ 연동하기
• 사실 처음 보는 문법도 많고 설명할 개념도 많지만 처음부터 너무 힘들까봐 나중에 만들 PPT에 설
명하도록 하겠습니다.
__declspec(dllexport), CallingConvention 등 일단 지금은 넘어가도록 합시다.
C#에서 NATIVE C++ 연동하기
간단한 덧셈 함수를 C++로 구현하고 C#에서 사용해 보았습니다.
다음 PPT에는 DirectX Sample을 이용해 멋진 폼을 만들어 보겠습니다.
사용했던 프로젝트
https://github.com/jihwankim/CS_PPT
END

More Related Content

Viewers also liked

게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴MinGeun Park
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
Easyloggingpp
EasyloggingppEasyloggingpp
Easyloggingpp
지환 김
 
Json for modern c++
Json for modern c++Json for modern c++
Json for modern c++
지환 김
 
[Effective Modern C++] Chapter1 - item1
[Effective Modern C++] Chapter1 - item1[Effective Modern C++] Chapter1 - item1
[Effective Modern C++] Chapter1 - item1
지환 김
 
04게임의뼈대세우기
04게임의뼈대세우기04게임의뼈대세우기
04게임의뼈대세우기
태성 이
 
Dll 파일 호출의 2가지 방법
Dll 파일 호출의 2가지 방법Dll 파일 호출의 2가지 방법
Dll 파일 호출의 2가지 방법진상 문
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기
iFunFactory Inc.
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
Chris Ohk
 
Kgc2012 온라인 게임을 위한 게임 오브젝트 설계
Kgc2012 온라인 게임을 위한 게임 오브젝트 설계Kgc2012 온라인 게임을 위한 게임 오브젝트 설계
Kgc2012 온라인 게임을 위한 게임 오브젝트 설계kgun86
 
[Effective Modern C++] Chapter1 - item2
[Effective Modern C++] Chapter1 - item2[Effective Modern C++] Chapter1 - item2
[Effective Modern C++] Chapter1 - item2
지환 김
 
[KASA] Game Engine???
[KASA] Game Engine???[KASA] Game Engine???
[KASA] Game Engine???changehee lee
 
[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개
진현 조
 
C#과 유니티를 통한 게임개발 입문.
C#과 유니티를 통한 게임개발 입문.C#과 유니티를 통한 게임개발 입문.
C#과 유니티를 통한 게임개발 입문.
해근 조
 
Engines, Tools, and Scripts
Engines, Tools, and ScriptsEngines, Tools, and Scripts
Engines, Tools, and ScriptsKalito Viscra
 
엔진, 툴, 그리고 스크립트
엔진, 툴, 그리고 스크립트엔진, 툴, 그리고 스크립트
엔진, 툴, 그리고 스크립트
Kalito Viscra
 
New features in C# 6
New features in C# 6New features in C# 6
New features in C# 6
Software Associates
 
Configuring SSL on NGNINX and less tricky servers
Configuring SSL on NGNINX and less tricky serversConfiguring SSL on NGNINX and less tricky servers
Configuring SSL on NGNINX and less tricky servers
Axilis
 
NuGet Must Haves for LINQ
NuGet Must Haves for LINQNuGet Must Haves for LINQ
NuGet Must Haves for LINQ
Axilis
 

Viewers also liked (20)

게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
Easyloggingpp
EasyloggingppEasyloggingpp
Easyloggingpp
 
Json for modern c++
Json for modern c++Json for modern c++
Json for modern c++
 
[Effective Modern C++] Chapter1 - item1
[Effective Modern C++] Chapter1 - item1[Effective Modern C++] Chapter1 - item1
[Effective Modern C++] Chapter1 - item1
 
04게임의뼈대세우기
04게임의뼈대세우기04게임의뼈대세우기
04게임의뼈대세우기
 
Dll 파일 호출의 2가지 방법
Dll 파일 호출의 2가지 방법Dll 파일 호출의 2가지 방법
Dll 파일 호출의 2가지 방법
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
 
Kgc2012 온라인 게임을 위한 게임 오브젝트 설계
Kgc2012 온라인 게임을 위한 게임 오브젝트 설계Kgc2012 온라인 게임을 위한 게임 오브젝트 설계
Kgc2012 온라인 게임을 위한 게임 오브젝트 설계
 
[Effective Modern C++] Chapter1 - item2
[Effective Modern C++] Chapter1 - item2[Effective Modern C++] Chapter1 - item2
[Effective Modern C++] Chapter1 - item2
 
[KASA] Game Engine???
[KASA] Game Engine???[KASA] Game Engine???
[KASA] Game Engine???
 
[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개
 
C#과 유니티를 통한 게임개발 입문.
C#과 유니티를 통한 게임개발 입문.C#과 유니티를 통한 게임개발 입문.
C#과 유니티를 통한 게임개발 입문.
 
Engines, Tools, and Scripts
Engines, Tools, and ScriptsEngines, Tools, and Scripts
Engines, Tools, and Scripts
 
엔진, 툴, 그리고 스크립트
엔진, 툴, 그리고 스크립트엔진, 툴, 그리고 스크립트
엔진, 툴, 그리고 스크립트
 
New features in C# 6
New features in C# 6New features in C# 6
New features in C# 6
 
Configuring SSL on NGNINX and less tricky servers
Configuring SSL on NGNINX and less tricky serversConfiguring SSL on NGNINX and less tricky servers
Configuring SSL on NGNINX and less tricky servers
 
NuGet Must Haves for LINQ
NuGet Must Haves for LINQNuGet Must Haves for LINQ
NuGet Must Haves for LINQ
 

Similar to C#으로 게임 엔진 만들기(1)

NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
Yi-kwon Hwang
 
swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑
NAVER D2
 
C# 뉴비를 위한 맛보기 2
C# 뉴비를 위한 맛보기 2C# 뉴비를 위한 맛보기 2
C# 뉴비를 위한 맛보기 2
진상 문
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
Chanwoong Kim
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
devCAT Studio, NEXON
 
[170403 2주차]C언어 A반
[170403 2주차]C언어 A반[170403 2주차]C언어 A반
[170403 2주차]C언어 A반
arundine
 
MFC 발견 (1)
MFC 발견 (1)MFC 발견 (1)
MFC 발견 (1)
종훈 박
 
게임프로그래머에게 배우는 C#1권(버전1)
게임프로그래머에게 배우는 C#1권(버전1)게임프로그래머에게 배우는 C#1권(버전1)
게임프로그래머에게 배우는 C#1권(버전1)
Kiyoung Moon
 
GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축
철구 김
 
MinWin에 대해서
MinWin에 대해서MinWin에 대해서
MinWin에 대해서흥배 최
 
MinWin에 대해서
MinWin에 대해서MinWin에 대해서
MinWin에 대해서OnGameServer
 
Sources와 Sinks를 Confluent Cloud에 원활하게 연결
Sources와 Sinks를 Confluent Cloud에 원활하게 연결Sources와 Sinks를 Confluent Cloud에 원활하게 연결
Sources와 Sinks를 Confluent Cloud에 원활하게 연결
confluent
 
백엔드 서버 개발과 코틀린의 조합
백엔드 서버 개발과 코틀린의 조합백엔드 서버 개발과 코틀린의 조합
백엔드 서버 개발과 코틀린의 조합
Daeseok Kim
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & Nana
Lazy Ahasil
 
10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기
Minyoung Jeong
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
CircleCI로 Serverless API의 CI/CD 환경 구축하기
CircleCI로 Serverless API의 CI/CD 환경 구축하기CircleCI로 Serverless API의 CI/CD 환경 구축하기
CircleCI로 Serverless API의 CI/CD 환경 구축하기
Kyuhyun Byun
 
오픈소스따라하기
오픈소스따라하기오픈소스따라하기
오픈소스따라하기
병대 손
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
iFunFactory Inc.
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
Taeyeop Kim
 

Similar to C#으로 게임 엔진 만들기(1) (20)

NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
 
swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑
 
C# 뉴비를 위한 맛보기 2
C# 뉴비를 위한 맛보기 2C# 뉴비를 위한 맛보기 2
C# 뉴비를 위한 맛보기 2
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
 
[170403 2주차]C언어 A반
[170403 2주차]C언어 A반[170403 2주차]C언어 A반
[170403 2주차]C언어 A반
 
MFC 발견 (1)
MFC 발견 (1)MFC 발견 (1)
MFC 발견 (1)
 
게임프로그래머에게 배우는 C#1권(버전1)
게임프로그래머에게 배우는 C#1권(버전1)게임프로그래머에게 배우는 C#1권(버전1)
게임프로그래머에게 배우는 C#1권(버전1)
 
GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축
 
MinWin에 대해서
MinWin에 대해서MinWin에 대해서
MinWin에 대해서
 
MinWin에 대해서
MinWin에 대해서MinWin에 대해서
MinWin에 대해서
 
Sources와 Sinks를 Confluent Cloud에 원활하게 연결
Sources와 Sinks를 Confluent Cloud에 원활하게 연결Sources와 Sinks를 Confluent Cloud에 원활하게 연결
Sources와 Sinks를 Confluent Cloud에 원활하게 연결
 
백엔드 서버 개발과 코틀린의 조합
백엔드 서버 개발과 코틀린의 조합백엔드 서버 개발과 코틀린의 조합
백엔드 서버 개발과 코틀린의 조합
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & Nana
 
10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
 
CircleCI로 Serverless API의 CI/CD 환경 구축하기
CircleCI로 Serverless API의 CI/CD 환경 구축하기CircleCI로 Serverless API의 CI/CD 환경 구축하기
CircleCI로 Serverless API의 CI/CD 환경 구축하기
 
오픈소스따라하기
오픈소스따라하기오픈소스따라하기
오픈소스따라하기
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
 

C#으로 게임 엔진 만들기(1)

  • 1. C#으로 게임 엔진 만들기 (1) 김지환 NHN NEXT
  • 2. 목표 • C++/CLI에 대한 간략한 설명. • C#에서 Native C++ 연동하기. ( Native DLL 이용 )
  • 3. C++/CLI • 쉽게 말하면 Unmanaged Code인 C++과 Managed Code인 C# (.NET)의 중간 단계 언어이다. • 한마디로 Native와 .NET의 중간 지점에서 서로를 연결해 주는 언어이다.
  • 4. C++/CLI • C++ 프로젝트에서 Static Library ( .lib )를 생성 • 생성한 Lib를 C++/CLI로 Wrapping해서 DLL 생성 • C#에서 생성한 DLL 사용 http://topnanis.tistory.com/97
  • 5. C++/CLI • 나중에 C++/CLI만 다룬 PPT를 다시 만들건데 왜냐 하면, 그 양이 너무 많기 때문입니다. • 지금은 연습 삼아 아주 간단한 프로젝트를 만들어 봅니다.
  • 6. C#에서 NATIVE C++ 연동하기 • Wrapping을 거치지 않은 Unmanaged DLL을 C#과 연동하는 방법에 대해서 설명합니다. • C++/CLI를 이용한 방법은 다음 PPT에 설명하도록 하겠습니다.
  • 7. C#에서 NATIVE C++ 연동하기 새 솔루션을 생성하고 C# 프로젝트를 추가합니다.
  • 8. C#에서 NATIVE C++ 연동하기 만들어진 솔루션에 C# 프로젝트가 추가되었습니다. 이제 C++ 프로젝트를 새로 추가해야 합니다.
  • 9. C#에서 NATIVE C++ 연동하기
  • 10. C#에서 NATIVE C++ 연동하기
  • 11. C#에서 NATIVE C++ 연동하기 2개의 프로젝트가 생성되었습니다. 프로젝트 아이콘을 보면 CoreLib는 C++ SimpleCal는 C# 임을 알 수 있습니다.
  • 12. C#에서 NATIVE C++ 연동하기 다른 프로젝트에서 생성될 DLL과 경로를 맞춰주기 위해서 C# 프로젝트의 세팅을 약간 바꿨습니다.
  • 13. C#에서 NATIVE C++ 연동하기 마찬가지로 C++ 프로젝트의 DLL 생성 경로를 바꿨습니다.
  • 14. C#에서 NATIVE C++ 연동하기 CoreLib 프로젝트의 CoreLib.cpp 두 정수를 받아 더한 결과를 반환해주는 Add함수를 작성하였다.
  • 15. C#에서 NATIVE C++ 연동하기 SimpleCal 프로젝트의 Form1.cs CoreLib.dll에서 Add함수를 불러와 호출.
  • 16. C#에서 NATIVE C++ 연동하기 프로젝트를 빌드하고 실행하면 MessageBox.Show( DLL.Add(1,2).ToString() ); 구문에서 호출된 Add(1,2)의 반환값인 3이 표시된다.
  • 17. C#에서 NATIVE C++ 연동하기 • 사실 처음 보는 문법도 많고 설명할 개념도 많지만 처음부터 너무 힘들까봐 나중에 만들 PPT에 설 명하도록 하겠습니다. __declspec(dllexport), CallingConvention 등 일단 지금은 넘어가도록 합시다.
  • 18. C#에서 NATIVE C++ 연동하기 간단한 덧셈 함수를 C++로 구현하고 C#에서 사용해 보았습니다. 다음 PPT에는 DirectX Sample을 이용해 멋진 폼을 만들어 보겠습니다. 사용했던 프로젝트 https://github.com/jihwankim/CS_PPT
  • 19. END