아래의 속성 수정

프로젝트->속성->구성속성->일반->프로젝트 기본값->공용 언어 런타임 지원 = 공용 언어 런타임 지원(/clr)

(컴파일 하면 에러 발생하면 하나하나씩 컴파일 옵션 처리해주면 된다)

 

#include <iostream>

#include <stdlib.h>

#include <string.h>

#include "msclr\marshal_cppstd.h" 

 

using std::cout;

using std::endl;

using std::string;

 

using namespace System;

using namespace msclr::interop;

 

void main()

{

         String ^s = "abc";

        

         string unmanaged = marshal_as<std::string>(s->ToUpper());

 

         cout << unmanaged << endl;

}

 

 

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

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

 

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

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

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

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

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

+ Recent posts