Wrapping을 이용해 C#에서 Native C++ 프로젝트 사용하기
Programing/C++/ CLI 2012. 7. 23. 17:29 |출처 : http://tatis3.springnote.com/pages/4160233
Wrapping을 이용해 C#에서 Native C++ 프로젝트 사용하기
Lib 프로젝트 생성
Native C++에 해당하며, 실제 프로그램 로직등은 이곳에 속해있다.
간단하게 Framework 클래스를 만들어보자.
- class CFramework
{
public:
void Create( HWND hwnd )
{
// 핸들을 받아 D3D 디바이스 생성
}
};
DLL 프로젝트 생성
프로젝트 속성에서 공용 언어 런타임 지원을(/clr) 설정해준다.
위에 작성한 프로젝트를 빌드 후 나오는 Lib 파일을 불러오고, 헤더를 추가해준다.
랩핑 클래스를 작성하고, 랩핑할 클래스의 객체를 선언 후 사용하면 된다.
밑의 코드에서 CFramework의 Create함수를 랩핑하고 있다.
- // 엔진의 정적 라이브러리
#ifdef _DEBUG
#pragma comment ( lib, "Engine_d.lib" )
#else
#pragma comment ( lib, "Engine.lib")
#endif
// 랩핑 클래스 구현
#pragma once
#include "Framework.h" // 랩핑할 Native C++ 클래스 헤더를 참조
using namespace System;
namespace CWrapper {
public ref class CFrameworkWrapper
{
public:
CFrameworkWrapper();
~CFrameworkWrapper();
public:
void Create( IntPtr hWnd )
{
m_hHwnd = (HWND)hWnd.ToInt32();
m_pFrameWork = new CFramework();
m_pFrameWork->Run( m_hHwnd );
}
protected:
HWND m_hHwnd;
CFramework* m_pFrameWork;
};
}
C# 프로젝트 생성
C#의 Windows 응용프로그램 프로젝트를 생성해준다.
폼 디자이너에서 적당히 폼을 만들어주고 PictureBox 컨트롤을 배치해준다. 이 컨트롤에 실제 화면이 그려지게 된다.
그 다음 솔루션 탐색기에서 참조 추가를 이용해 위에 작성한 프로젝트의 DLL ( 미리 빌드 해놓자 )을 찾아서 추가해준다.
DLL이 성공적으로 추가 되면, 랩핑 클래스를 사용할수 있게 된다.
랩핑 클래스에서 선언한 네임 스페이스를 선언한 후 랩핑 클래스 객체를 생성하자.
그 다음 Create 함수에 PictureBox 핸들을 인자로 넘겨주면, Native C++쪽의 CFramework에서 이 핸들을 쓸수 있게된다.
정상적으로 작업이 수행되면, Native C++쪽에서 만들어지는 화면이 C#의 PitureBox에 그려지게 된다
- using CWrapper;
- public partial class Mainform : Form
{
private CFrameworkWrapper m_Frameowrk;
public Mainform()
{
InitializeComponent();
}
public void InitializeFramework()
{
m_Frameowrk = new CFrameworkWrapper();
m_Frameowrk.Create(pictureBox1.Handle);
}
}