Pergunta

Eu gostaria de saber se existe uma maneira de misturar C # e Obj-C código em um projeto. Especificamente, eu gostaria de usar Cocos2D para minha UI em Obj-C e chamar alguns MonoTouch C # -Library que faz alguns cálculos e obter alguns valores de volta. Existe uma maneira de fazer isso? Ou talvez o contrário, i. e. construindo no MonoTouch e chamando Cocos2d-funções? Obrigado.

Foi útil?

Solução

A configuração que você descreve é ??possível, mas o gasoduto não é tão bom como ele é quando você faz o seu projeto inteiro em MonoTouch. Esta é, de facto, como nós bootstrapped MonoTouch: levou uma amostra Objective-C existente e, em seguida, substituiu os pedaços um a um com código gerenciado.

Nós caiu essas amostras como eles bitrot.

Mas você ainda pode conseguir este feito, use a opção de linha de comando --xcode do mtouch para gerar um programa de exemplo para você, e depois copiar os bits que você quer da template.m gerado em seu main.m. Personalizar os componentes que você quer, e apenas iniciar o projeto XCode de lá.

Durante seu ciclo de desenvolvimento, você vai continuar a usar mtouch --xcode

Outras dicas

Re: desconhecido (google):

Na verdade, fizemos isso como descrito.

Veja esta página para um início rápido, mas o último segmento de código na página está errado, porque ele está omitindo o -parameter "--xcode". http://monotouch.net/Documentation/XCode

O que você tem que fazer para incorporar seu Mono-EXE / DLL em um programa de Objective-C é compilar sua fonte com SharpDevelop, mtouch em seguida, executar com estes parâmetros:

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

Isso só funciona com a versão completa do MonoTouch. O julgamento não permite usar o -argument "--xcode". O "--linksdkonly" -argument é necessário se você quiser mtouch para manter as classes não referenciados na saída compilada, caso contrário, ele retira código não utilizado.

Então mtouch compila a sua montagem em código ARM nativo (.s extensão de arquivo) e também gera um modelo XCode que carrega o Mono-tempo de execução e seu código dentro do / ObjC-programa XCode. Agora você pode usar este modelo imediatamente e incluir seu-C-código de Obj ou extrair o código de tempo de execução de carga do -file "main.m" e insira-o no-projeto Xcode existente. Se você usar um projeto existente você também tem que copiar todos .exe / .dll / .s arquivos do Xcode-output-dir que mTouch feita.

Agora você tem seu Mono-Runtime e montagem carregado em um projeto-XCode. Para se comunicar com sua montagem, você tem que usar o Mono-Embedding-API (não faz parte do MonoTouch, mas Mono). Estes são chamadas de API C-estilo. Para uma boa introdução consulte desta página .

Além disso, o Mono-Embedding-API documentação pode ser útil.

O que você tem que fazer agora em sua-C-código de Obj é fazer chamadas Embedding-API. Esses passos podem envolver: Obter o domínio de aplicação, obter o conjunto, obter a imagem do conjunto, localize a classe que você deseja usar, instanciar um objeto dessa classe, encontrar métodos em sala de aula, métodos de compra sobre objeto, argumentos de métodos encapsular em C-matrizes e passá-las para o método de chamada, obter e valores método de extrato de retorno. Existem exemplos para isso no-api-doc-page embutir acima.

Você apenas tem que ter cuidado com o consumo de memória de sua biblioteca, como o mono runtime leva algum memória também.

Portanto, esta é a maneira de Obj-C para C #. Se você quiser fazer chamadas a partir de C # / Mono em seu programa Obj-C, você tem que usar os MonoTouch-ligações, que são descritos aqui .

Você também pode usar as chamadas-Método C puros da incorporação / P / Invoke-API.

Espero que isso faz com que você começou.

No fim de semana verificou-se que alguém tenha sido portar Cocos2D para .NET, assim que você também pode fazer todo o trabalho na NET:

http://github.com/city41/CocosNet

Cocos2D começou como um projeto Python, que mais tarde foi portado para Objective-C, e agora há um esforço ativo para trazê-lo para C #. Ele não está terminado, mas o autor está aceitando manchas e pode ser a melhor maneira para a frente.

Chamando Objective-C do MonoTouch definitivamente parece possível. Veja a exemplos seletor Objective-C

O que biblioteca está ligando? Talvez haja um equivalente Objective-C.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top