1. 비관리 클래스에서 관리 클래스를 멤버로
비관리 클래스에서 관리 클래스를 멤버로 가지고 싶을 때는 ‘gcroot’라는 템플릿을 사용합니다.
#include "stdafx.h"
#include <iostream>
#include <vcclr.h>
using namespace System;
class TEST
{
public:
TEST() {}
~TEST() {}
gcroot< String^ > m_str;
};
int main(array<System::String ^> ^args)
{
TEST test;
test.m_str = gcnew String("Hello VSTS 2010");
Console::WriteLine( test.m_str);
getchar();
return 0;
}
‘gcroot’를 사용하기 위해서는
#include <vcclr.h>
를 포함해야 합니다.
비관리 클래스에서 관리 클래스인 String을 다음과 같이 멤버로 선언합니다.
그리고 사용하기 위해서는 할당을 합니다.
test.m_str = gcnew String("Hello VSTS 2010");
2. 관리 클래스에서 비관리 클래스를 멤버로
관리 클래스에서 비관리 클래스를 멤버로 가질 때는 비관리 클래스를 포인터로 선언하여 비관리 힙에 동적할당을 합니다.
#include "stdafx.h"
#include <iostream>
#include <vcclr.h>
using namespace System;
class TEST
{
public:
TEST() {}
~TEST() {}
};
ref class refTEST
{
public:
refTEST() {}
~refTEST() {}
TEST* test;
};
int main()
{
refTEST^ refTest = gcnew refTEST();
refTest->test = new TEST;
return 0;
}
참고
http://msdn.microsoft.com/ko-kr/library/481fa11f%28v=VS.80%29.aspx
http://blog.naver.com/scor7910/40048083284
'C++/CLI' 카테고리의 다른 글
[Step. 09] 델리게이트 (delegate) (2) | 2010.08.12 |
---|---|
[Step. 08] 프로퍼티 ( property ) (8) | 2010.08.06 |
[Step. 06-2] 관리코드의 문자열과 비관리코드의 문자열 변환 (3) | 2010.07.23 |
[Step. 06-1] 관리코드의 문자열과 비관리코드의 문자열 변환 (0) | 2010.07.16 |
[Step. 05] 관리 코드의 array를 비관리 코드에 포인터로 전달 (0) | 2010.07.09 |