1つのプロジェクトにC#とObj-Cのコードを混在させる方法があるかどうか知りたいのですが。具体的には、Obj-CのUIにCocos2Dを使用し、いくつかの計算を実行していくつかの値を取得するMonoTouch C#-Libraryを呼び出したいと思います。これを行う方法はありますか?または、逆の場合、つまり、MonoTouchでビルドし、Cocos2D-functionsを呼び出す場合はどうでしょうか。ありがとう。
5 に答える
説明するセットアップは可能ですが、MonoTouchでプロジェクト全体を実行する場合ほどパイプラインはスムーズではありません。これが実際にMonoTouchをブートストラップした方法です。既存のObjective-Cサンプルを取得し、ビットを1つずつマネージコードに置き換えました。
それらがビット腐敗したので、それらのサンプルを落としました。
ただし、これを実行するには、mtouchの--xcodeコマンドラインオプションを使用してサンプルプログラムを生成し、生成されたtemplate.mからmain.mに必要なビットをコピーします。必要なコンポーネントをカスタマイズし、そこからXCodeプロジェクトを開始するだけです。
開発サイクル中は、引き続きmtouch--xcodeを使用します。
再:不明(グーグル):
説明したように実際にこれを行いました。
クイックスタートについてはこのページを参照してください。ただし、「-xcode」パラメータが省略されているため、このページの最後のコードセグメントは間違っています。 http://monotouch.net/Documentation/XCode
Mono-EXE / DLLをObjective-Cプログラムに埋め込むために必要なことは、SharpDevelopを使用してソースをコンパイルし、次のパラメータを使用してmtouchを実行することです。
/Developer/MonoTouch/usr/bin/mtouch --linksdkonly --xcode=output_dir MyMonoAssembly.exe
これは、MonoTouchのフルバージョンでのみ機能します。トライアルでは、「-xcode」引数を使用できません。コンパイルされた出力で参照されていないクラスをmtouchに保持させたい場合は、「-linksdkonly」引数が必要です。それ以外の場合は、未使用のコードを削除します。
次に、mtouchはアセンブリをネイティブARMコード(ファイル拡張子.s)にコンパイルし、Mono-RuntimeとコードをXCode/ObjCプログラム内にロードするXCodeテンプレートも生成します。これで、このテンプレートをすぐに使用してObj-Cコードを含めるか、「main.m」ファイルからランタイムロードコードを抽出して、既存のXCodeプロジェクトに挿入できます。既存のプロジェクトを使用する場合は、mtouchが作成したxcode-output-dirからすべての.exe / .dll/.sファイルもコピーする必要があります。
これで、Mono-RuntimeとアセンブリがXCodeプロジェクトにロードされました。アセンブリと通信するには、Mono-Embedding-API(MonoTouchの一部ではなく、Mono)を使用する必要があります。これらはCスタイルのAPI呼び出しです。良い紹介については、このページを参照してください。
また、Mono-Embedding-APIのドキュメントが役立つ場合があります。
Obj-Cコードで今やらなければならないことは、Embedding-API呼び出しを行うことです。これらの手順には、アプリケーションドメインの取得、アセンブリの取得、アセンブリのイメージの取得、使用するクラスの検索、そのクラスからのオブジェクトのインスタンス化、クラス内のメソッドの検索、オブジェクトのメソッドの呼び出し、メソッド引数のカプセル化が含まれる場合があります。 C配列を作成し、それらをメソッド呼び出しに渡し、メソッドの戻り値を取得および抽出します。上記のembedding-api-doc-pageにこの例があります。
モノラルランタイムもある程度のメモリを消費するため、ライブラリのメモリ消費に注意する必要があります。
つまり、これがObj-CからC#への道です。C#/ MonoからObj-Cプログラムを呼び出す場合は、ここで説明するMonoTouchバインディングを使用する必要があります。
また、embedding / P/Invoke-APIからの純粋なCメソッド呼び出しを使用することもできます。
これで始められることを願っています。
週末に、誰かがCocos2Dを.NETに移植していることが明らかになったので、.NETですべての作業を行うこともできます。
http://github.com/city41/CocosNet
Cocos2DはPythonプロジェクトとして開始され、後にObjective-Cに移植され、現在はC#に移行するための積極的な取り組みが行われています。まだ完成していませんが、作者はパッチを受け入れており、より良い方法かもしれません。
MonoTouchからObjective-Cを呼び出すことは間違いなく可能に見えます。Objective-Cセレクターの例を参照してください
どの図書館を呼んでいますか?おそらく、Objective-Cに相当するものがあります。