2013. 7. 22. 09:44ㆍC++
원본 : http://blog.naver.com/limdp99?Redirect=Log&logNo=60034273093
이번에 파티클 에디터를 만들면서 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 );
}
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());
}
}
}
[출처] c++ lib 를 c# 에서 사용하기 (c++/cli)|작성자 휠쓰