#using
using namespace System;
#pragma unmanaged
class counter {
int value_;
public:
counter() : value_(0) {};
void increment(){ ++value_; }
int value() const { return value_; }
};
#pragma managed
ref class CounterLib
{
counter* counter_; //アンマネージオブジェクト
public:
//コンストラクタ
CounterLib()
{
counter_ = new counter();
}
//デストラクタ
~CounterLib()
{
this->!CounterLib();
}
protected:
//ファイナライザ
!CounterLib()
{
delete counter_;
}
public:
//プロパティ
property int Value
{
int get(){ return counter_->value(); }
}
//Increment メソッド
void Increment()
{
counter_->increment();
}
};
int main(array^ args)
{
CounterLib^ clib = gcnew CounterLib();
clib->Increment();
Console::WriteLine("値:{0}",clib->Value);
Console::ReadKey();
return 0;
}
C++/CLIではマネージヒープを確保するためにgcnewを使い、メソッドやプロパティにアクセスするためにはアロー演算子(->)を持ちいります。
またマネージクラスのハンドルは^(キャレット)を使います。
ConsoleクラスのWriteLineメソッドは クラス名::メソッド(引数) という感じです。
[hr]
C関数もC++/CLIで呼び出すことも可能です。以下にコードを示します。 マネージクラスに static を付けると静的メソッドとなり、この場合は Hello::Test(); と書く必要があります。