2012-05-29 2 views
1

안녕하세요 저는 임베디드 모노와 NaCl을 사용하고 있습니다. 모든 것이 지금까지는 작동하지만, .NET에서 exe를 실행 한 것과 같은 스레드가 아닌 c에서 .NET 메소드를 호출하는 방법은 idk입니다.임베디드 모노 : 다른 스레드에서 'mono_runtime_invoke'를 사용하는 방법

void Mono_InvokeMethod(const char* assemblyName, const char* method, const char* arg) 
{ 
    MonoAssemblyName* man = mono_assembly_name_new(assemblyName); 
    assert(man); 
    MonoAssembly* ma = mono_assembly_loaded(man); 
    assert(ma); 
    MonoImage* mi = mono_assembly_get_image(ma); 
    assert(mi); 
    MonoMethodDesc* mmd = mono_method_desc_new(method, "Second.Program" /* include_namespace */); 
    assert(mmd); 
    MonoMethod* mm = mono_method_desc_search_in_image(mmd, mi); 
    assert(mm); 
    void *args[1]; 
    args[0] = mono_string_new(mono_get_domain(), arg);//mono_get_root_domain() <<<<<<< Maybe use this instead 

    mono_runtime_invoke(mm, NULL /* "this" object */, args, NULL /* exception */); 
} 

답변

4

당신은 자신이 새로운 스레드를 시작하고 mono_runtime_invoke 전에 mono_thread_attach를 호출해야합니다 : 여기

내가 사용하려고 해요 방법입니다. 당신이 원하는대로 당신은 mono_thread_attach 여러 번 호출 할 수 있습니다
void thread_callback (MonoMethod *method, void **args) 
{ 
    mono_thread_attach (mono_get_root_domain()); 
    mono_runtime_invoke (method, NULL, args, NULL); 
} 

, 당신은 당신이 그것을라고했는지 추적 할 필요가 없습니다 : 이것은 thread_callback 가정 같을 것이다 별도의 스레드에서 호출하는 방법입니다 특정 스레드 또는 아닙니다.

+0

늦은 응답을 기다립니다. 지금은 'mono_method_desc_search_in_image'에 매달려 있습니다 ... 결코 'mono_runtime_invoke'가됩니다. – zezba9000

+0

@ zezba9000 : gdb로 디버깅 해보세요. 스레드가 무엇을하려고하는지 알려줍니다. 일부 API에 대한 잠금 요구 사항이 있다고 생각합니다 (단, 사용하는 API는 확실하지 않음). 모노 소스 코드는 이에 대한 힌트를 제공해야합니다. –

+0

NaCl (Native Client)에서 모노를 사용하고 디버깅으로 프로젝트를 실행할 수 없다고 생각합니다. Chrome 콘솔 창에서 런타임 오류에 의존해야합니다. 나는 네가 정답이라고 확신하고, 다른 조각들이 작동하는 중간에있다. Tnx – zezba9000