MonoTouch: общение от Obj-C до MonoTouch - PullRequest
1 голос
/ 29 марта 2011

Я пытаюсь вызвать сборку MonoTouch из существующего проекта Objective C.Я нашел эту статью:

http://www.guidebee.biz/forum/redirect.php?fid=16&tid=176&goto=nextoldset

Там очень хорошо описаны шаги, однако, когда я пытаюсь построить проект в XCode, я получаю следующую ошибку:

ошибка: нет SDK с указанным именем или путем '/Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator.sdk'

Итак, чтобы было ясно:

  1. У меня естьдобавлен правильный путь. Дополнительные SDK архитектур
  2. Физически проверил, правильный ли путь
  3. Я собираюсь использовать последний SDK (который у меня есть) - iOS 4.2

Я в тупике.Это проблема с XCode, которая не находит правильный путь к SDK или что-то более глубокое?Я с тревогой заметил, что URL-адрес, указанный в статье (http://monotouch.net/Documentation/XCode), теперь отсутствует - поэтому Novell MonoTouch по какой-то причине намеренно удалил его?

Обновление:

Ну, я 'Я полностью озадачен - я не могу вызвать из Mono в код Obj-C, используя селекторы.Так что в качестве последней попытки рва я выкладываю код:

@implementation MonoWrapper
- (id)init {
    self = [super init];

    if (self) {
        NSBundle *main = [NSBundle mainBundle];
        NSString *path = [main bundlePath];
        const char *c_path = [path UTF8String];

        [main autorelease]; 
        [path autorelease];

        chdir (c_path);
        setenv ("MONO_PATH", c_path, 1);
        setenv ("MONO_XMLSERIALIZER_THS", "no", 1);
        setenv ("DYLD_BIND_AT_LAUNCH", "1", 1);
        setenv ("MONO_REFLECTION_SERIALIZER", "yes", 1);

        _domain = mono_jit_init_version ("MonoTouch", "v2.0.50727");
        MonoAssembly *assembly = mono_assembly_open("PhoneGap.dll", NULL);
        MonoImage *image = mono_assembly_get_image(assembly);
        MonoClass *class = mono_class_from_name(image, "PhoneGap", "PhoneGap");
        MonoMethodDesc *methodDesc = mono_method_desc_new("PhoneGap.PhoneGap:getInt", TRUE);
        _callbackMethod = mono_method_desc_search_in_class(methodDesc, class);

        /* allocate memory for the object */
        _instance = mono_object_new (_domain, class);
        /* execute the default argument-less constructor */
        mono_runtime_object_init (_instance);   

    }
    // Done
    return self;
}

- (void)DoSomething {
    int jim = 0;
} 

- (int)multiplyA:(int)a {
    void *params[] = { self, @selector(DoSomething), &a };
    MonoObject *result = mono_runtime_invoke(_callbackMethod, _instance, params, NULL);
    int n = *(int*)mono_object_unbox (result);
    return n;
}
@end

И в Mono:

using System;
using MonoTouch.ObjCRuntime;  

namespace PhoneGap
{
    public class PhoneGap
    {
        public PhoneGap ()
        {
        }

        public int getInt(IntPtr instance, IntPtr sel, int val) {


            Messaging.void_objc_msgSend (instance, sel);
            return val * 2;
        }
    }
}

Может кто-нибудь сказать мне, как получить дескриптор экземпляра Target в Mono и какполучить селектор?

1 Ответ

1 голос
/ 30 марта 2011

MonoTouch исторически включал поддержку до того, как у нас появился собственный отладчик.С тех пор мы отказались от этой поддержки, так как теперь у нас есть полноценный отладчик.То, что вы пытаетесь сделать, хотя технически возможно, не поддерживается рабочим процессом.Если вы хотите продолжить этот путь, я предлагаю использовать флаг «-keeptemp» для MonoTouch в сочетании с «-v -v -v», который не удалит временные файлы, которые мы генерируем при компиляции проекта.

Используя эту информацию, вы можете извлечь шаблон main.m и теоретически выяснить, как вызывать arm-darwin-mono для кросс-компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...