개발/Application Develop

C++/CLI 기본 예제

huiyu 2014. 10. 17. 17:32

1. C++/CLI란?

'C++/CLI'는 네이티브와 .NET의 중간 지점에 있는 또는 서로를 연결해 주는 언어라고 할 수 있습니다.


2. C++/CLI의 기본적인 흐름

 C/C++코드를 C#에서 사용하는 기본적인 방법은 Wrapper 클래스를 통한 방법ㅇ비니다. C++코드를 컴파일 하여 Static Library 파일로 만듭니다. 만들어진 lib 파일을 C++/CLI를 이용해 감싸, dll 파일로 만듭니다. 이렇게 해서 C#에서 이용가능한 Managed Code를 만든 것입니다.

 C#에서는 C++/CLI로 만들어진 dll파일을 참조하여 사용하면 됩니다.


3. C++로 Native Code 만들기

간단하게 두 개의 정수 인자를 받아서 합을 반환하는 함수를 만듭니다.

파일->새로만들기->프로젝트, VisualC++->Win32 콘솔 응용프로그램 생성

정적 라이브러리 체크, 나머지 기본값으로 하시고 마침 선택합니다.


- 다음과 같이 작성합니다.

 AddCal.h

#pragma once
class AddCal
{
private:
	explicit AddCal(const AddCal& _rAddCal);
	AddCal &operator=(const AddCal&);

public:
	explicit AddCal();
	virtual ~AddCal();

	int Add(int _num1, int _num2);
};


AddCal.cpp

#include "stdafx.h"
#include "AddCal.h"

AddCal::AddCal()
{
}

AddCal::~AddCal()
{
}

int AddCal::Add(int _num1, int _num2)
{
	return(_num1 + _num2);
}

- 컴파일 하게 되면 UnmanagedCal.lib 파일이 생성됩니다.


4. C++/CLI로 코드 감싸기

- NativeCode를 Managed Assebly(.dll)로 만들어야 합니다.  이 때 사용하는 것이 C++/CLI로 클래스를 작성하여 Native코드를 감쌉니다.

새프로젝트 , VisualC++->CLR->클래스 라이브러리 선택 후 생성합니다.


생성된 프로젝트에 Native Code의 "AddCal.h"파일을 추가합니다.


다음, 파일->추가->기존 프로젝트 선택 후, Native Project를 추가합니다.


프로젝트 속성으로 들어 간 후,  참조에 NativeCode로 작성한 Project를 추가합니다.(새 참조 추가를 누르시면 됩니다.)

이제 코드를 다음과 같이 작성합니다

managedCal.h

#pragma once #include "..\UnmanagedCal\AddCal.h" using namespace System; namespace managedCal { public ref class AddCalWrap { protected: AddCal* m_pAddCal; public: AddCalWrap(); virtual ~AddCalWrap(); int Add(int _num1, int _num2); }; }


managedCal.cpp

// 기본 DLL 파일입니다.

#include "stdafx.h"

#include "managedCal.h"

namespace managedCal
{
	AddCalWrap::AddCalWrap() : m_pAddCal(new AddCal)
	{

	}

	AddCalWrap::~AddCalWrap()
	{
		if (m_pAddCal)
		{
			delete m_pAddCal;
			m_pAddCal = 0;
		}
	}

	int AddCalWrap::Add(int _num1, int _num2)
	{
		return (m_pAddCal->Add(_num1, _num2));
	}
}

- 컴파일 하면 dll파일이 생성됩니다.


5. C#을 이용해 C++/CLI로 생성된 dll 파일 이용하기

- 새 프로젝트 생성


-다음, 파일 -> 추가 -> 기존프로젝트 'ManagedCal', UnManagedCal' 두 개의 프로젝트를 불러옵니다



- 프로젝트 오른쪽 버튼-> 추가->참조를 선택 후


-managedCal프로젝트를 선택합니다.


-다음과 같이 작성하고 실행시켜주면 됩니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CliDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            managedCal.AddCalWrap obj = new managedCal.AddCalWrap();

            Console.WriteLine(obj.Add(1, 2));
            Console.Read();
        }
    }
}


참고 블로그 : http://six605.tistory.com/384

728x90
반응형

'개발 > Application Develop' 카테고리의 다른 글

OpenCV 동영상에서 원하는 프레임만 가져오기  (1) 2014.10.20
OpenCV 이미지 띄우기  (0) 2014.10.20
2. WPF + OpenCV(dll)  (2) 2014.10.11
1. OpenCV 설치하기  (1) 2014.10.11
MFC 기초  (0) 2014.07.22