게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
삽질완료~ C++DLL을 C#에서 사용하는 방법
게시물ID : programmer_8768짧은주소 복사하기
작성자 : 게임할줄몰라
추천 : 4
조회수 : 2807회
댓글수 : 3개
등록시간 : 2015/03/20 13:19:56

1. Win32 DLL 프로젝트로 작성된 클래스

// MyClass.h
class __declspec(dllexport) CMyClass
{
public:
	int Func1(int a, int b);
	void Func2(int *a);
};
// MyClass.cpp
int CMyClass::Func1(int a, int b)
{
	return (a + b);
}
int CMyClass::Func2(int *a)
{
	*a++;
}

해당 DLL의 클래스는 C++에서 바로 사용이 가능하지만
C#에서는 사용이 힘들다 (가능할것같지만 너무 어려워서 포기)


2. Class Library로 작성된 클래스

// MyClassWrapper.h
#include "MyClass.h"
namespace Wrapper
{
	public ref class CMyClassWrapper
	{
	private:
		CMyClass *m_MyClass;
	public:
		CMyClassWrapper();
		virtual ~CMyClassWrapper();
	public:
		int Func1(int a, int b);
		void Func2(int %a);
	};
}
// MyClassWrapper.cpp
namespace Wrapper
{
	CMyClassWrapper::CMyClassWrapper()
	{
		m_MyClass = new CMyClass;
	}
	CMyClassWrapper::~CMyClassWrapper()
	{
		if(m_MyClass != 0)
			delete m_MyClass;
	}
	int CMyClassWrapper::Func1(int a, int b)
	{
		return m_MyClass->Func1(a, b);
	}
	void CMyClassWrapper::Func2(int %a)
	{
		int temp;
		m_MyClass->Func2(&temp);
		a = temp;
	}
}

원래 클래스의 함수를 호출시켜주기만 하는 단순한 클래스인데
다만 포인터를 매개변수로 받는 함수들은 좀 까다로움 ㅜㅜ
구글검색해보면 문자열이나 콜백함수포인터들을 받아서 처리하는방법도 볼수있지만 어렵네요 ㅋㅋ
CLI문법은 참 특이하네요.. %를 나머지연산할때빼고 저렇게 쓰는건 첨봄;;


3. C#에서 사용
Wrapper에서 빌드해 나온 DLL을 참조추가만 하면 바로 사용이 가능.
[DllImport(...)] 따위 안써도 되는 편의성! (단지 이거하나때문에...)

using MyClassWrapper;
namespace TestProject
{
	public class Test
	{
		CMyClassWrapper obj = new CMyClassWrapper();
		private void foo()
		{
			int value = obj.Func1(10, 5);
			// value == 15
			obj.Func2(ref value);
			// value == 16
		}
	}
}



저번에 관련 질문 올렸을때 답변달아주신 분들 감사합니다.

이제 가능성 여부 테스트가 끝났으니 개발을 시작 ㅋㅋㅋ

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호