«前の日記(2010年07月19日) 最新 次の日記(2010年07月26日)» 編集

日々をアレコレ


2010年07月20日

VC++.NETで関数のポインタをデリゲートに変換する方法

VC++.NETでの開発で、自分で作った関数のポインタをデリゲートに変換したい場合は次のようにするといい模様。

// 変換先のデリゲート
delegate int DeleType(int);

// 変換元の関数ポインタの型
typedef int (*pFunc)(int);

// デリゲートへの変換に使うクラス
ref struct RefType
{
    pFunc my_func;                                      // 実行したい関数へのポインタ
    RefType(pFunc func) { my_func = func; }             // コンストラクタ
    int DeleFunc(int param) { return my_func(param); }  // デリゲートとして実行する関数
}

// デリゲートとして登録したい関数
int MyFunc(int param)
{
    return param * 2;
}

int main(void)
{
     // デリゲートを作成
     DeleType my_dele = gcnew DeleType( gcnew RefType(MyFunc), &RefType::DeleFunc );

    // デリゲート呼出
    my_dele(2);

    return 0;
}

C++: .NET Framework プログラミング最良の言語を参照すること。

こうすると、C#で作成したライブラリに対して、.NETっぽくなく作成した関数のポインタを渡してC#のライブラリ側で実行することができる。


«前の日記(2010年07月19日) 最新 次の日記(2010年07月26日)» 編集