2012년 6월 17일 일요일

C++로 작성된 엔진 DLL을 C++/CLI로 Wrapping 하는 중

순수하게 C++로 만들어진 DLL 엔진을 .NET과 연동 시키기 위해서 C++/CLI로 Wrapping 하고 있다.
C++/CLI로 하면 추가적인 프로젝트가 생성이 되어 귀찮아지니 C#에서 바로 DLL을 로딩 하여 사용할려 했지만, 이러나 저러나 Wrapping을 해줘야 하다보니 그럴거면 차라리 C++/CLI를 하는게 낳을 듯 하여 시작하게 되었다.
C++/CLI를 하나도 모르는 채로 하다보니 이리저리 삽질을 많이 하고 있는 중인데, 가장 삽질 하는 곳은 역시나 마샬링. 사용법을 잘 모르고 그냥 시작 하다보니 관리와 비관리 간의 마샬링이 미친듯이 골치 아프다. 그리고 또 골치 아픈것은 C++ DLL의 인터페이들에서 미친듯이 사용되고 있는 포인터들. 아래에 예를 들면

int CreateArray(void* handle, struct T** array);

void DeleteArray(void* handle, struct T* array);

배열을 가져오기 위해 이중 포인터를 인자로 넘겨주고 있다. 힙에 할당해서 넘겨주다 보니 해제 할때 그 주소 그대로 넘겨줘야 한다. 이것 때문에 어떻게 해야 할지 미친듯이 삽질을.
답은 있을텐데 아직 괜찮은 답을 못찼았다.

어쨌든 C++/CLI도 만져볼 겸 .NET으로 래핑도 해줄 겸 해서, 삽질 좀 해야 될듯 하다.

댓글 없음:

댓글 쓰기