2011-08-14 34 views
1

私はC++ライブラリを利用するモノタッチでアプリケーションを書いていますので、p/inokeを使用してC#から関数を呼び出していろいろなことを行ってきました。しかし、C++コードではなくC#関数を呼びたいというシナリオがいくつか現れています。C++からC#関数を呼び出していますか?

だから、のようなもの:

void CPlusPlusFunction(Pointer* stuff) 
{ 
    //do stuff 

    CSharpFunction(*stuff); 
} 

は、これは可能であり、私はそれについてどのように行くことができそうか?おそらく関数を呼び出す代わりに、C++への代理人を呼び出して呼び出すことは可能でしょうか?もしそうであれば、それはどのように機能しますか?私が本当にやりたいことは、関数内のその時点ですぐにC#に情報を渡すことだけです。

ありがとうございました!

答えて

3

はいできます。しかし、デバイス向けにコンパイルされたMonoTouchコードに使用されるAOTコンパイラは、適切なコードを生成できるように、そのようなコールバックを認識している必要があります。したがって、コールバックは[MonoPInvokeCallback]属性で装飾されている必要があります。

http://developer.xamarin.com/guides/ios/advanced_topics/limitations/#Reverse_Callbacks

2

ネイティブライブラリと同じように、共有ライブラリから関数をエクスポートするようにC#に依頼できます。さらに、C#はデリゲートを同じシグネチャの関数ポインタに変換することができます。このポインタはC++に渡すことができます。

+0

私たちに簡単な例を教えてください。 –

+0

C#がデリゲート(コールバックEnumWindowsProc)を使用してC関数EnumWindows()にIntPtrとして渡す方法の例を次に示します。 https://code.msdn.microsoft.com/windowsapps/Enumerate-top-level-9aa9d7c1 – Elmue

関連する問題