Domanda

Mi piacerebbe sapere se c'è un modo per mescolare C # e Obj-C codice in un unico progetto. In particolare, mi piacerebbe utilizzare Cocos2d per la mia interfaccia utente in Obj-C e chiamare alcuni MonoTouch C # -Biblioteca che fa alcuni calcoli e ottenere alcuni valori indietro. C'è un modo per fare questo? O forse il contrario, i. e. costruzione in MonoTouch e chiamando Cocos2d-funzioni? Grazie.

È stato utile?

Soluzione

La configurazione che si descrive è possibile, ma la pipeline non è liscia come è quando si fa l'intero progetto in MonoTouch. Questo è in realtà il modo in cui bootstrap MonoTouch: abbiamo preso un campione Objective-C esistente e poi abbiamo sostituito i bit uno per uno con codice gestito.

Abbiamo lasciato quei campioni come bitrot.

Ma è ancora possibile arrivare a questo fatto, utilizzare l'opzione della riga di comando --xcode del mTouch per generare un programma di esempio per voi, e quindi copiare i bit che si desidera dal template.m generato nel main.m. Personalizzare i componenti che si desidera, e basta avviare il progetto XCode da lì.

Durante il ciclo di sviluppo, si continuerà ad utilizzare --xcode mTouch

Altri suggerimenti

Re: sconosciuto (Google):

In realtà abbiamo fatto questo come descritto.

Si veda questa pagina per un rapido avvio, ma l'ultimo segmento di codice in quella pagina è sbagliato, perché è omettendo il -parameter "--xcode". http://monotouch.net/Documentation/XCode

Quello che devi fare per incorporare il Mono-EXE / DLL in un Objective-C programma è quello di compilare il sorgente con SharpDevelop, quindi eseguire mTouch con questi parametri:

/Developer/MonoTouch/usr/bin/mtouch --linksdkonly --xcode=output_dir MyMonoAssembly.exe

Questo funziona solo con la versione completa di MonoTouch. La prova non permette di utilizzare la -argument "--xcode". Il -argument "--linksdkonly" è necessaria se si vuole mTouch mantenere le classi senza riferimento nell'output compilato, altrimenti spoglia codice inutilizzato.

Poi mTouch compila il vostro assembly in ARM-codice nativo (.s estensione file) e genera anche un modello di XCode che carica il mono-runtime e il codice all'interno del XCode / objC programma. È ora possibile utilizzare questo modello subito e inserisci la tua Obj-C-code o estrarre il codice runtime caricamento dal -file "main.m" e inserirla nel XCode-progetto esistente. Se si utilizza un progetto esistente si hanno anche per copiare tutti i file .exe dll / / .S dalla Xcode-uscita-dir che mTouch fatto.

Ora avete il vostro Mono-Runtime e montaggio caricati in un XCode-progetto. Per comunicare con il montaggio, è necessario utilizzare il Mono-Embedding-API (non fa parte di MonoTouch, ma Mono). Si tratta di chiamate API in stile C. Per una buona introduzione vedere questa pagina .

Anche il Mono-Embedding-API documentazione potrebbe essere utile.

Quello che dovete fare ora nella vostra Obj-C-codice per effettuare chiamate Embedding-API. Questi passaggi potrebbero comportare: Prendi il dominio di applicazione, ottenere il montaggio, ottenere l'immagine del gruppo, individuare la classe che si desidera utilizzare, un'istanza di un oggetto da quella classe, trovare metodi di classe, metodi di call su oggetto, incapsulare argomenti del metodo in C-array e li passa al metodo di guardia, e ottengono valori restituiti metodo estratto. Ci sono esempi di questo sul-api-doc-page embedding sopra.

Devi solo stare attenti con il consumo di memoria della vostra libreria, come il runtime mono richiede un po 'di memoria pure.

Quindi questo è il modo in cui da Obj-C a C #. Se si desidera effettuare chiamate da C # / Mono nel vostro Obj-C-programma, è necessario utilizzare i MonoTouch-binding, che sono descritti qui .

Si potrebbe anche usare C-metodo di pura chiama dalla incorporamento / P / Invoke-API.

Spero che questo è una buona partenza.

Durante il fine settimana è emerso che qualcuno è stato porting Cocos2d a .NET, così si potrebbe anche fare tutto il lavoro su .NET:

http://github.com/city41/CocosNet

Cocos2d iniziato come un progetto Python, che più tardi ma ho portato su Objective-C, e ora c'è uno sforzo attivo per portarlo a C #. E non è finita, ma l'autore accetta patch e potrebbe essere un modo migliore di avanzare.

Calling Objective-C da MonoTouch sembra decisamente possibile. Vedere la Objective-C esempi selettore

Cosa biblioteca stai chiamando? Forse c'è un Objective-C equivalente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top