2012-03-09 11 views
2

でサポートされていない、私はC++の関数を呼び出すとき:C#で'TEST' が言語

public ref class TEST_CLASS 
{ 
    void TEST(void (*func)()) 
    { 
     (*func)() 
    } 
}; 

TEST_CLASS t = new TEST_CLASS(); 
t.TEST(f); 

を私はエラーを取得:

'TEST' is not supported by the language

何このエラーの原因になりますか?どうすれば修正できますか?

+2

「テスト」は、非常に非常に一般的な単語です。少なくとも、それが事前procの問題ではないことを確認するためにそれをMYTESTにしてください。 – Kashyap

+0

C#プロジェクトからC++プロジェクトへの参照を削除して再追加し、両方のプロジェクトを再構築してください。 – dtb

+0

これを確認してください:http://social.msdn.microsoft.com/Forums/en/vsx/thread/03bdca3b-22b3-4f48-b146-5d89b3a288df * C#は管理オブジェクトへのポインタを扱うことができません。*問題は '( * func) '? – Yuck

答えて

6

When I call a the C++ function:

これはC++コードではなく、C++/CLIクラスを記述したものです。 refクラスキーワードに注意してください。あなたはC関数ポインタを取るメソッドを宣言しました。それはC++/CLI言語では問題ありません。ネイティブコードとマネージコードのコンストラクトを混在させることができますが、ではなく、はC#やVB.NETのような言語には問題ありません。彼らは、代理人のという関数ポインタの管理バージョンを使用することを主張しています。

.NET Frameworkには、C関数ポインタMethodInvokerのシグネチャと一致するデリゲート型が既に用意されています。ちょっと傷ついその名前をピッキング

public ref class TEST_CLASS 
{ 
public: 
    delegate void TEST_delegate(); 

    void TEST(TEST_delegate^ func) 
    { 
     func(); 
    } 
}; 

:しかし、あなたは署名に拡張すると、たとえば、独自の引数を追加し、タイプを返すようにしたいとしましょう。