[Mono-dev] Make mono work with CoreCLR
nelson
nelson.cabral at gmail.com
Sun Apr 7 19:22:52 UTC 2013
I've been trying to produce a version of the .net 4.5 profile with
SecurityAttributes injected with Mono's Tuner (Mono.Tuner), and then use
this version in a C++ app with an embedded mono. If successfull I would like
to produce a github project as a starting point for anybody wanting to do
the same thing (which you would expect from someone doing this).
It worked at first, but I do not know how, I broke something. Now the
produced mscorlib produces a nice error when loading first (calling
mono_jit_init_version) :
Unhandled exception at 0x65b4416d in EmbeddedMonoTest.exe: 0xC0000005:
Access violation writing location 0x0000000c.
I've been trying to resolve this error since two weeks but the error in
undebuggable. Does someone has an idea on how to debug this ?
I'm working on Windows with Cygwin.
The test c++ app :
// EmbeddedMonoTest.cpp : Defines the entry point for the console
application.
//
#include "stdafx.h"
#include <mono/metadata/debug-helpers.h>
#include <mono/metadata/exception.h>
#include <mono/jit/jit.h>
#include <mono/metadata/assembly.h>
#include <mono/metadata/appdomain.h>
#include <mono/utils/mono-publib.h>
#include <string>
bool hasEnding (std::string const &fullString, std::string const &ending)
{
if (fullString.length() >= ending.length()) {
return (0 == fullString.compare (fullString.length() - ending.length(),
ending.length(), ending));
} else {
return false;
}
}
mono_bool is_platform_code (const char *image_name)
{
std::string libname(image_name);
if( hasEnding(libname, "ClassLibrary1.dll") )
return false;
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
try{
mono_set_dirs("C:\\cygwin\\usr\\local\\lib","C:\\cygwin\\usr\\local\\etc");
mono_security_set_core_clr_platform_callback (is_platform_code);
mono_security_enable_core_clr ();
MonoDomain* domain = mono_jit_init_version ("ClassLibrary1",
"v4.0.30319"); // crashes here
MonoAssembly* assembly = mono_domain_assembly_open (domain,
"ClassLibrary1.dll");
mono_assembly_get_image(mono_domain_assembly_open (domain,
"ClassLibrary2.dll"));
MonoImage* image = mono_assembly_get_image (assembly);
MonoClass* klass = mono_class_from_name(image, "ClassLibrary1", "Class1");
MonoMethod* test = mono_class_get_method_from_name(klass, "Test", 0);
MonoObject* ex;
mono_runtime_invoke(test, NULL, NULL, &ex);
}
catch(...)
{
}
return 0;
}
--
View this message in context: http://mono.1490590.n4.nabble.com/Make-mono-work-with-CoreCLR-tp4659254.html
Sent from the Mono - Dev mailing list archive at Nabble.com.
More information about the Mono-devel-list
mailing list