###前提・実現したいこと
Xamarin.FormsからObjective-Cで書いたライブラリの関数を呼ぶ際、
戻り値の型がvoid, int, floatのときは問題なく使えているのですが、
今回intやfloatの配列を受け取る必要が出てきて
そのときにApiDefinitions.csの記述をどう書き換えれば良いのかわからず詰まってしまいました。アドバイスお願いします。
(javaで書いたライブラリは特に悩むこともなく配列を扱えました)
###該当のソースコード
+ (float *)makeArrayF { static float array[5]; array[0] = 2.0f; for ( int i = 1; i < 5; i++ ) { array[i] = array[i-1]*2.0f; } return array;//[2.0,4.0,8.0,16.0,32.0] } + (int *)makeArrayI { static int array[5]; for ( int i = 0; i < 5; i++ ) { array[i] = (i + 1) * 10; } return array;// [10,20,30,40,50] }
Xamarin.iOS部から上記の配列を受け取りたいと思っています。
Objective-Cの別関数の中から上記関数を読んだときに、期待した配列を返していることは確認しています。
###発生している問題・エラーメッセージ
Objective-Sharpieを使うとApiDefinitions.csの中の該当部からは以下のようになっています。
// +(float *)makeArrayF; [Static] [Export ("makeArrayF")] [Verify (MethodToProperty)] unsafe float* MakeArrayF { get; } // +(int *)makeArrayI; [Static] [Export ("makeArrayI")] [Verify (MethodToProperty)] unsafe int* MakeArrayI { get; }
http://qiita.com/tana_/items/9434eda5f26295d36c26
などの情報を頼るとにVerifyの行は削除
{get;}のところは関数にした方がいいのか迷いつつこのままと関数の両パターンを試しましたが、肝心の戻り値の型をどう書き換えればよいかがまだわかっておりません。
###試したこと
戻り値の型としてIntPtrやNSArrayを使うことでビルドだけは通るようになりました。
IntPtrとして受け取った場合は
http://kenrow.b.osdn.me/2011/11/24/intptr-%E3%81%8B%E3%82%89%E3%81%AE%E8%89%B2%E3%80%85%E3%81%AA%E5%9E%8B%E3%81%B8%E3%81%AE%E5%A4%89%E6%8F%9B/
を参考に配列に変換してみましたが、期待した値ではありませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Xamarin 6.3(build 864)
Mac Note Pro
OS X Yosemite(10.10.5)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/20 07:21