C++/CLR 클래스

 

Calculrator.cpp

#include "Calculator.h"

 

 

Calculator::Calculator()

{

}

 

 

int Calculator::Sum(int aint b)

{

         return a + b;

}

 

int Calculator::Max(int aint b)

{

         return System::Math::Max(ab);

}

 

string Calculator::HelloWorld(string text)

{

         return text.append("\tHello World!");

}

 

 

 

Calculrator.h

#pragma once

 

#include <string>

 

using std::string;

 

ref class Calculator

{

public:

         Calculator();

         int Sum(int a, int b);

         int Max(int a, int b);

         string HelloWorld(string text);   

};

 

 

 

C++/CLR Native 랩퍼 클래스

 

CalculratorWrapper.cpp

 

#include "CalculatorWrapper.h"

 

CalculatorWrapper::CalculatorWrapper()

{

         _managedObject = gcnew Calculator();

}

CalculatorWrapper::~CalculatorWrapper()

{

 

}

 

int CalculatorWrapper::Sum(int aint b)

{

         return _managedObject->Sum(ab);

}

int CalculatorWrapper::Max(int aint b)

{

         return _managedObject->Max(ab);

}

string CalculatorWrapper::HelloWorld(string text)

{

         return _managedObject->HelloWorld(text);

}

 

ICalculatorWrapper        *ICalculatorWrapper::CreateInstance()

{

         return ((ICalculatorWrapper *)new CalculatorWrapper());

}

 

void ICalculatorWrapper::Destroy(ICalculatorWrapper *instance)

{

         delete instance;

}

 

 

CalculratorWrapper.h

#pragma once

 

#include <vcclr.h>

#include <string>

#include "ICalculatorWrapper.h"

#include "Calculator.h"

 

 

class DLLAPI CalculatorWrapper : ICalculatorWrapper

{

private:

         gcroot<Calculator ^>  _managedObject;

public:

         CalculatorWrapper();

         ~CalculatorWrapper();

         int Sum(int a, int b);

         int Max(int a, int b);

         string HelloWorld(string text);

};

※ gcroot 템플릿 이용해서 C++/CLR 개체 사용

 

 

C++/CLR 랩퍼 인터페이스

ICalculratorWrapper.h

 

#pragma once

 

#include <string>

using std::string;

 

#ifdef CPLUSPLUSCLR_EXPORTS

#define DLLAPI  __declspec(dllexport)

#else

#define DLLAPI  __declspec(dllimport)

#pragma comment (lib"CPlusPlusCLR.lib"

#endif

 

class DLLAPI ICalculatorWrapper

{

public:

         virtual int Sum(int a, int b) = 0;

         virtual string HelloWorld(string text) = 0;

         virtual int Max(int a, int b) = 0;

         static ICalculatorWrapper *CreateInstance();

         static void      Destroy(ICalculatorWrapper *instance);

};

 

 

 

랩퍼 클래스를 이용해 사용하는 Native 클래스

 

#include <iostream>
#include "ICalculatorWrapper.h"
 
using std::cout;
using std::endl;
 
void main()
{
	ICalculatorWrapper *wrapper = ICalculatorWrapper::CreateInstance();
 
	int sum = wrapper->Sum(12, 12);
	int max = wrapper->Max(100, 9);
	string text = wrapper->HelloWorld("test");
	
	cout << sum << endl;
	cout << text << endl;
 
	ICalculatorWrapper::Destroy(wrapper);
} 

 

'기타 > C++' 카테고리의 다른 글

Native C++에서 C++/CLR 클래스 사용하기(CLR 옵션)  (0) 2015.03.06
콘솔싸이월드  (0) 2011.01.20
비트학생관리  (0) 2011.01.20

+ Recent posts