Question

Je voudrais savoir s'il y a un moyen de mélanger C # et le code Obj-C dans un projet. Plus précisément, je voudrais utiliser Cocos2D pour mon interface utilisateur dans Obj-C et appeler certains MonoTouch C # -Bibliothèque qui fait quelques calculs et obtenir des valeurs de retour. Y a-t-il un moyen de faire cela? Ou peut-être l'inverse, i. e. la construction en MonoTouch et appelant Cocos2d-fonctions? Merci.

Était-ce utile?

La solution

La configuration que vous décrivez est possible, mais le pipeline est pas aussi lisse comme lorsque vous faites l'ensemble de votre projet MonoTouch. Ceci est en fait la façon dont nous MonoTouch force du poignet: nous avons pris un échantillon Objective-C existant et nous avons ensuite remplacé les bits un par un avec le code managé.

Nous avons laissé tomber les échantillons qu'ils bitrot.

Mais vous pouvez toujours obtenir ce fait, utilisez l'option de ligne de commande --xcode de mTouch pour générer un exemple de programme pour vous, puis copiez les bits que vous voulez à partir du template.m généré dans votre main.m. Personnaliser les composants que vous voulez, et juste démarrer le projet XCode à partir de là.

Au cours de votre cycle de développement, vous continuerez à utiliser --xcode mTouch

Autres conseils

Re: inconnu (google):

Nous avons fait cela comme décrit.

Voir cette page pour un démarrage rapide, mais le dernier segment de code sur cette page est faux, parce qu'il est en omettant le -parameter « de --xcode ». http://monotouch.net/Documentation/XCode

Ce que vous devez faire pour intégrer votre Mono-EXE / DLL dans un programme-C L'objectif est de compiler votre avec SharpDevelop, puis exécutez mTouch avec ces paramètres:

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

Cela fonctionne uniquement avec la version complète de MonoTouch. Le procès ne permet pas d'utiliser le -argument « de --xcode ». Le -argument « --linksdkonly » est nécessaire si vous voulez mTouch garder les classes non référencées dans la sortie compilée, sinon il bandes code inutilisé.

Ensuite mTouch compile votre ensemble dans ARM-code natif (extension de fichier .s) et génère également un modèle de XCode qui charge le Mono-Runtime et votre code à l'intérieur du XCode / ObjC-programme. Vous pouvez maintenant utiliser tout ce modèle loin et inclure votre Obj-C-code ou extraire le code de chargement d'exécution du -file « main.m » et l'insérer dans votre projet XCode existant. Si vous utilisez un projet existant, vous devez également copier tous les fichiers .exe / .dll / .s de la Xcode-sortie dir que mTouch fait.

Maintenant que vous avez votre Mono-Runtime et de montage chargés dans un XCode-projet. Pour communiquer avec votre assemblée, vous devez utiliser le Mono-Embedding-API (ne fait pas partie de MonoTouch, mais Mono). Ce sont les appels API de type C. Pour une bonne introduction voir cette page .

De plus, le documentation Mono-Embedding-API pourrait être utile.

Qu'est-ce que vous avez à faire maintenant dans votre Obj-C-code est de faire des appels Embedding-API. Ces étapes pourraient impliquer: Obtenez le domaine d'application, obtenir l'assemblée, obtenir l'image de l'assemblage, recherchez la classe que vous souhaitez utiliser, instancier un objet de cette classe, trouver des méthodes en classe, des méthodes d'appel sur l'objet, encapsuler les arguments de méthode dans C-réseaux et les transmettre à la méthode d'appel, obtenir et méthode d'extraction des valeurs de retour. Il existe des exemples de ce sur l'intégration de-api-doc-page ci-dessus.

Il suffit de faire attention à la consommation de mémoire de votre bibliothèque, comme le moteur d'exécution mono prend de la mémoire ainsi.

C'est donc le chemin de Obj-C à C #. Si vous voulez faire des appels à partir de C # / Mono dans votre programme Obj-C, vous devez utiliser les liaisons MonoTouch, qui sont décrits ici .

Vous pouvez également utiliser pur méthode C-appels de l'intégration / P / Invoke-API.

Espérons que cela vous permet de démarrer.

Le week-end, il est apparu que quelqu'un a été le portage Cocos2D vers .NET, vous pouvez également faire tout le travail sur .NET:

http://github.com/city41/CocosNet

Cocos2D a commencé comme un projet Python, qui a reçu plus tard porté sur Objective-C, et maintenant il y a un effort actif pour le porter à C #. Il est pas fini, mais l'auteur accepte patches et peut-être une meilleure façon d'avancer.

Appel Objective-C de MonoTouch semble certainement possible. Voir la exemples de sélection Objective-C

Quelle bibliothèque appelez-vous? Peut-être il y a un équivalent Objective-C.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top