2012-02-23 3 views
0

は私も仕事にライブラリを結合する最も簡単な種類を取得することはできません動作させることはできませんそれは次のようになります。はMonoTouchで結合ライブラリが

// TestLib.h 
#import <Foundation/Foundation.h> 
@interface TestLib : NSObject 
{ 
    NSString *status; 
} 
@property (nonatomic,retain) NSString *status; 
@end 

// TestLib.m 
#import "TestLib.h" 
@implementation TestLib 
@synthesize status; 
- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     [self setStatus:@"initialized"]; 
    } 

    return self; 
} 
@end 

プロジェクトはここにある:http://dl.dropbox.com/u/31924320/TestLib.tar.gz

私は「libTestLib.a」にこれをコンパイル。

次に、TestLibクラスを初期化し、ステータスプロパティのゲッターを呼び出すだけのシンプルなバインディングライブラリを作成しました(これをテストする「単一ビューアプリケーション」と一緒に)。ライブラリ(libTestLib.a)をバインディングライブラリに追加して、LinkWithファイル/アセンブリディレクティブを作成しました。プロジェクトはここにあることを

namespace TestLibBinder 
{ 
     [BaseType(typeof(NSObject))] 
     interface TestLib 
     { 
      [Export("status")] 
      string Status { get; set; } 
     } 
} 

http://dl.dropbox.com/u/31924320/BindingTest.tar.gz

私はStatusプロパティを取得しようとすると、残念ながら、私は

 public override void ViewDidLoad() 
     { 
       base.ViewDidLoad(); 

       TestLib testLib = new TestLib(); // succeeds! 
       string status = testLib.Status; // got a null reference 

       if (status != null) 
        label.Text = status; 
       else 
        label.Text = "binding failed";     
     } 
...バックライブラリからnull参照を取得しApiDefinition.csファイルは、次のようになります

答えて

3

私はBinding Libraryプロジェクトのアプローチから離れて、代わりにxamarinサンプルスイートのBindingSampleに自分のコードを置くことによって、この問題を解決しました。

MonoTouchを使ってobjective-CコードにC#バインディングを構築したい人は、実際にそのプロジェクトのMakefileを確認することから始めるべきです。それは概要を説明したアプローチは次のとおりです。

  1. 明示的に3つのアーキテクチャ(ARM6、ARM7、I386)のためのObjective-Cのコードをコンパイル
  2. にbtouch
  3. を使用し、単一のユニバーサル静的ライブラリを作成することがリポ利用DLLを作成し、アセンブリディレクティブ(LinkWith)を介してスタティックライブラリをインクルードする - その プロジェクト内のAssemblyInfo.csと、-link- オプションを使用したbtouchコマンドラインを参照してください。

私は個人的にはかなり簡単であることをApiDefinition.csラッパーを作成するプロセスを見つけましたが、いくつかの一般的な間違いがあります - 例えば1つのパラメータを取るセレクタの末尾のコロンを忘れてしまいます。

関連する問題