The following C test code calls the current Mono 4.2.1-91 framework.
It builds and runs fine on Xcode 6.4 on 10.10.

It fails if I build and run it on OS X 10.11 using Xcode 7.1 - EXC_BAD_ACCESS 
in mono_jit_runtime_invoke() when calling AssemblyName:GetName()
However the built binary runs fine outside of the Xcode environment.

This obviously makes life difficult.
Any ideas or suggestions as to why this is occurring?
Is there anyway to mitigate it?

Jonathan

// Link against both Mono and CoreFoundation.
// Header search path set to /Library/Frameworks/Mono.framework/Headers/Mono-2.0
// Architecture i386.
#include <stdio.h>
#import <mono/jit/jit.h>
#import <mono/metadata/metadata.h>
#import <mono/metadata/debug-helpers.h>

MonoObject *invokeName(MonoObject *object, char *name);

int main(int argc, const char * argv[]) {
    
    // init
    MonoDomain *domain = mono_jit_init_version("Dubrovnik", "v4.0.30319");
    MonoAssembly *assembly = mono_domain_assembly_open(domain, "mscorlib");
    
    // returns System.Reflection.Assembly
    MonoReflectionAssembly *assemblyObject = mono_assembly_get_object(domain, 
assembly);
    
    // returns System.Reflection.AssemblyName
    MonoObject *assemblyNameObject = invokeName((MonoObject *)assemblyObject, 
":GetName()");
    
    // returns System.Version
    MonoObject *versionObject = invokeName(assemblyNameObject, 
":get_Version()");

    // Returns System.String
    MonoObject *stringObject = invokeName(versionObject, ":ToString()");
    printf("Version : %s\n", mono_string_to_utf8((MonoString *)stringObject));
    
    return 0;
}

MonoObject *invokeName(MonoObject *object, char *name)
{
    MonoClass *klass = mono_object_get_class(object);
    
    MonoMethodDesc *methodDesc = mono_method_desc_new(name, 1);
    MonoMethod *meth = NULL;
    while (klass != NULL) {
        meth = mono_method_desc_search_in_class(methodDesc, klass);
        if(meth != NULL) {
            meth = mono_object_get_virtual_method(object, meth);
            break;
        }
        klass = mono_class_get_parent(klass);
    }
    MonoObject *monoException = NULL;
    MonoObject *resultObject = mono_runtime_invoke(meth, object, NULL, 
&monoException);
    
    klass = mono_object_get_class(resultObject);
    printf("invokeName returned : %s\n", mono_class_get_name(klass));
    
    return resultObject;
}














 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Xcode-users mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/xcode-users/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to