Mono CSharp Evaluator:创建两个动作<;对象>;通过两个不同的Run()崩溃 我试图在C++执行文件中嵌入MUNO,在第二个计算器上进行单机崩溃。知道我错过了什么吗

Mono CSharp Evaluator:创建两个动作<;对象>;通过两个不同的Run()崩溃 我试图在C++执行文件中嵌入MUNO,在第二个计算器上进行单机崩溃。知道我错过了什么吗,mono,Mono,使用Mono3.0.3 EmbeddedMonoTest.cpp // 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/ji

使用Mono3.0.3

EmbeddedMonoTest.cpp

// 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>
int _tmain(int argc, _TCHAR* argv[])
{
    MonoDomain* domain = mono_jit_init_version ("ClassLibrary1", "v4.0.30319");
    MonoAssembly* assembly  = mono_domain_assembly_open (domain, "ClassLibrary1.dll");  
    mono_assembly_get_image(mono_domain_assembly_open (domain, "Mono.CSharp.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);
    mono_runtime_invoke(test, NULL, NULL, NULL); 
    return 0;
}

您是否尝试过在没有引导本机代码的情况下运行同一段托管代码?我问这个问题的原因是因为在.NET中(虽然不确定Mono)也必须这样做:evaluator.ReferenceAssembly(typeof(Action.Assembly));(我猜那应该是System.dll),如果您只测试托管部分(不测试本机部分),那么对每个人都会有很大的帮助,这样您就可以清楚地知道这本身是否正确,我的意思是。。你同时在做“伏都教”和“指挥古典音乐:)。有些事情出了问题,你不确定哪一项工作出了问题。首先播放古典音乐:)如果没有引用System.dll,它不会进行第一次运行(操作…)。
using System;
using System.Reflection;
using Mono.CSharp;

namespace ClassLibrary1
{
    public class Class1
    {
        public static void Test()
        {

            var assembly = Assembly.GetAssembly(typeof(Class1));

            CompilerSettings settings = new CompilerSettings();
            ReportPrinter printer = new ConsoleReportPrinter();
            CompilerContext context = new CompilerContext(settings, printer);
            Evaluator evaluator = new Evaluator(context);
            evaluator.ReferenceAssembly(assembly);
            evaluator.Run("using System; using ClassLibrary1;");
            evaluator.Run("Action<object> action = args => {{ 'x'.ToString(); }}; ");
            evaluator.Run("Action<object> b = args => {{ 'x'.ToString(); }}; ");
        }
    }
}
Unhandled exception at 0x0274b00d in EmbeddedMonoTest.exe: 0xC0000005: Access violation reading location 0x00000000.