アンマネージクラスをマネージクラスから呼び出す(C関数含む)

naohiro19
記事: 256
登録日時: 14年前
住所: 愛知県

アンマネージクラスをマネージクラスから呼び出す(C関数含む)

投稿記事 by naohiro19 » 13年前

C++/CLIのみでC++のクラスを呼び出すことができます。以下にコードを示します。

CODE:

#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;
} 
上記プログラムはVisual Studio 2005以降(Express含む)のCLRプロジェクトで正常に動作を確認しました。

C++/CLIではマネージヒープを確保するためにgcnewを使い、メソッドやプロパティにアクセスするためにはアロー演算子(->)を持ちいります。
またマネージクラスのハンドルは^(キャレット)を使います。
ConsoleクラスのWriteLineメソッドは クラス名::メソッド(引数) という感じです。
[hr]
C関数もC++/CLIで呼び出すことも可能です。以下にコードを示します。

CODE:

#using 
using namespace System;

#pragma unmanaged
#include 

void hello()
{
	std::cout ^ args)
{
	HelloTest::Hello();
	Console::ReadKey();
	return 0;
}
マネージクラスに static を付けると静的メソッドとなり、この場合は Hello::Test(); と書く必要があります。
最後に編集したユーザー naohiro19 on 2014年4月13日(日) 22:39 [ 編集 18 回目 ]

コメントはまだありません。