iOS ライブラリのラッパーをビルドします。ここまでは順調ですね。オブジェクトを返すメソッドを除きます。メソッドは常に代わりに NSObject を返します。object パラメータを持つデリゲートにも同じストーリーがあります。
たとえば、TCConnection は Monotouch バインディング プロジェクトで次のように定義されています。
//@interface TCConnection : NSObject
[BaseType (typeof(NSObject))]
public interface TCConnection
{
[ExportAttribute("state")]
int state {get;}
//...
}
クラスTCDeviceは次のように定義されています
//@interface TCDevice : NSObject
[BaseType (typeof(NSObject))]
public interface TCDevice
{
[ExportAttribute("initWithCapabilityToken:delegate:")]
IntPtr Constructor(String token, TCDeviceDelegate d);
[Export("connect:delegate:")]
TCConnection Connect([NullAllowed] NSDictionary param, [NullAllowed] TCConnectionDelegate del);
}
すべてが適切に dll にコンパイルされます。他のプロジェクトでdllを使用するときは、
MyTCDeviceDelegate d=new MyTCDeviceDelegate();
String token="XXXXX";
TCDevice dev=new TCDevice(token, d);
TCConnection conn=dev.Connect(null,null);
最後の行は常に Invalid Cast 例外をスローします。メソッドが NSObject を返すようです。
ここで何が欠けていますか?