이번에 파티클 에디터를 만들면서 mfc 말고 c# 을 사용해보았는데 c# 문법에 대한 자료는 많지만,
c++ lib 를 c# 에서 사용하는 방법에 대해 자세히 나온곳이 없어서 간단하게 정리해보았습니다.
작업순서는
1) c++ 로 lib 작성 (lib)
2) c++/cli 로 wrapper 를 만들고 (dll)
3) c# 에서 wrapper dll 를 호출해서 작업을 하게됩니다.
직접 해보자면
1) c++ 로 lib 를 하나 만듭니다. 저는 간단하게 다음과 같은 class 를 만들었습니다.
class cppLib
{
public :
int addValue( int value1, int value2 )
{
return ( value1 + value2 );
}
};
2) 그 다음에는 c++/cli 로 프로젝트를 만듭니다.

이곳에서 아까 만든 lib 를 link 시켜서 wrapper class 를 만듭니다.
[ header ]
namespace cliWrap
{
public ref class cppLibWrap
{
protected :
cppLib * m_pCppLib;
public :
cppLibWrap();
virtual ~cppLibWrap();
int addValue( int value1, int value2 );
};
} // namespace - cliWrap
[ source ]
namespace cliWrap
{
cppLibWrap::cppLibWrap() : m_pCppLib( new cppLib )
{}
cppLibWrap::~cppLibWrap()
{
if( m_pCppLib )
{
delete m_pCppLib;
m_pCppLib = 0;
}
}
//////////////////////////////////////////////////////////
int cppLibWrap::addValue( int value1, int value2 )
{
return m_pCppLib->addValue( value1, value2 );
}
} // namespace - cliWrap
3) wrapper class 작성이 끝났으면 c# 으로 프로젝트를 만듭니다.

c# 프로젝트 생성후에 위에서 작업한 2개의 프로젝트를 추가시켜줍니다.
wrapper class 쪽에서 만들어지는 dll 을 c# 에서 사용하게 되는데 매번 변경사항이
있을때마다 복사하기가 번거롭기 때문에 빌드시마다 자동으로 복사해주는 작업을 해줍시다.
Command Line 에 copy "$(TargetPath)" "$(SolutionDir)\simpleProject\$(TargetFileName)" 를
자신의 프로젝트 폴더에 맞게 적당히 수정해서 적어줍니다.
그 후에 dll 복사를 위해 wrapper 프로젝트를 다시 빌드해줍니다.
이제 c# 프로젝트에 c++/cli 로 만든 dll 을 붙여줍니다.
아까 만든 wrapper class dll 을 추가시켜줍니다.
이제 작업이 끝났습니다.
c# 프로젝트에서는 다음과 같이 그냥 사용하시면 됩니다.
namespace simpleProject
{
public partial class Form1 : Form
{
private cliWrap.cppLibWrap m_cppLibWrap = null;
public Form1()
{
InitializeComponent();
m_cppLibWrap = new cliWrap.cppLibWrap();
int returnValue = m_cppLibWrap.addValue(1, 2);
MessageBox.Show(returnValue.ToString());
}
}
}
이제 Property Grid 를 비롯해 c# 의 막강한 기능을 누리시면 됩니다.
다음에는 c# 에서 Property Grid 를 붙힐때 c++ lib 작업시에 미리 등록을 해서
자동화하는 방법에 대해 설명하고자 하는데 언제가 될지는 모르겠습니다. 하하~
ps. c#, c++/cli 문법에 대한것은 인터넷에 많기때문에 이곳에서 다루지 않았습니다.
참고할만한 c# 서적이 pdf 로 공개되어있습니다. 참고하시길 바랍니다.