2012-03-09 11 views
0

私はVisual C#で完全に動作するC++コードを含むDLLを持っています。私がC++ DLLにfuctonを作成すると、それはVisual C#で表示され、パラメータを指定しても呼び出されます。しかし、C++ DLLのパラメータの1つとして関数ポインタを追加すると、Visual C#ではそれを見つけることができません。C++の関数としてのパラメータ

C++関数:

int TEST(int *func) // Works fine and shows up in visual C#. 
{ 
    return 0; 
} 

int TEST2(int (*func)()) // Works, however doesn't show up in Visual C# 
{ 
    return 0; 
} 

UPDATE:私はC#のからTEST2を呼び出すと

、私はエラーを取得する:'TEST2' is not supported by the language

+0

「Visual C#で見つけることができません」という意味はどうですか? – templatetypedef

+1

上記は有効な関数宣言ですが、int(* func)()、つまりintを返す関数へのポインタを意味すると思われます。書かれているように、引数の型は 'int *'を返す関数です(この文脈では 'int *'を返す関数へのポインタを意味します)。 – celtschk

答えて

2

関数ポインタ引数は、次のように宣言する必要があります。

int TEST2(int (*func)()) { /*...*/ } 
+1

引数がなく、 'int *'を返す関数を入力として受け取ることが目標である場合、括弧が欠けていることは意図的なものかもしれません。質問から私はこれが目標かどうかは分かりません。 – templatetypedef

+0

私はそれがどちらかと考えていません。 –

+0

@templatetypedef:その場合、 'int *(* func)()'になります。 –

0

コンパイラにの代わりにint (*func)()の関数へのポインタであることをコンパイラに伝えるには、*funcの前後に括弧が必要です。

関連する問題