Xamarin 内で Objective-C ライブラリと C# をバインドしようとしています。バインドしようとしているクラス ヘッダーは次のとおりです。
@interface MGLPolyline : MGLMultiPoint <MGLOverlay>
+ (instancetype)polylineWithCoordinates:(CLLocationCoordinate2D *)coords
count:(NSUInteger)count;
私が理解できないのは、関数の最初のパラメーターを何にするかです。私はバインディングをこれにしようとしました:
Static][Export("polylineWithCoordinates:count:")]
[Internal]
MGLPolyLine PolyLineWithCoordinates(IntPtr coord, int count);
public partial class MGLPolyLine
{
public static unsafe MGLPolyLine PolyLineWithCoordinates(CLLocationCoordinate2D[] coords)
{
unsafe
{
GCHandle handle = GCHandle.Alloc(coords);
IntPtr pointer = (IntPtr)handle;
MGLPolyLine line = MGLPolyLine.PolyLineWithCoordinates(pointer,2);
handle.Free();
return line;
}
}
}
上記のコードは常に MGLPolyLine.PolyLineWithCoordinates(pointer, 2) 呼び出しから null を返すため、配列を正しく渡していないと思います。このバインディングを行う正しい方法は何ですか?
ありがとう
編集
Objective-Sharpie を使用して、それが作成するバインディングを確認しました。これが得られたものです。
// +(instancetype)polygonWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count;
[Static]
[Export ("polygonWithCoordinates:count:")]
unsafe MGLPolygon PolygonWithCoordinates (CLLocationCoordinate2D* coords, nuint count);
問題は、「btouch: Unknown kind CoreLocationCoordinate2D* coords in method 'MGLPolygon.PolygonWithCoordinates' (B1002)」というエラーが表示されることです。