CScriptDomain::CScriptDomain(const char *name, const char *configurationFile, bool setActive) : m_bRootDomain(false) , m_bDestroying(false) , m_name(name) { m_pDomain = mono_domain_create_appdomain(const_cast<char *>(name), const_cast<char *>(configurationFile)); CRY_ASSERT(m_pDomain); if(setActive) SetActive(); }
CScriptDomain::CScriptDomain(const char *name, bool setActive) : m_bRootDomain(false) , m_bDestroying(false) , m_name(name) { m_pDomain = mono_domain_create_appdomain(const_cast<char *>(name), nullptr); if(setActive) SetActive(); }
int main() { #if LOADDYNAMIC SetupMono(); #endif #if WIN32 SetEnvironmentVariable(L"MONO_PATH",L"..\\..\\..\\builds\\monodistribution\\lib\\mono\\2.0"); #else setenv("MONO_PATH","../../../builds/monodistribution/lib/mono/2.0",1); #endif MonoDomain* domain = mono_jit_init_version ("Unity Root Domain","v2.0.50727"); //create and set child domain MonoDomain* child = mono_domain_create_appdomain("Unity Child Domain",NULL); mono_domain_set(child,0); //load assembly and call entrypoint MonoAssembly* ass = mono_domain_assembly_open (mono_domain_get (),"lucas.exe"); MonoImage* img = mono_assembly_get_image(ass); printf("image %p\n",img); MonoMethodDesc* desc = mono_method_desc_new("Main2:Main",1); MonoMethod* m = mono_method_desc_search_in_image(desc,img); printf("method %p\n",m); MonoObject* exc; MonoObject* newinst = mono_object_new(mono_domain_get(),mono_method_get_class(m)); MonoObject* ret = mono_runtime_invoke(m,newinst,0,&exc); printf ("Exception: %p\n",exc); if (exc) { MonoException* exc2 = (MonoException*) exc; printf ("exc msg:%s\n",mono_class_get_name(mono_object_get_class((MonoObject*)exc))); } printf ("ret: %p\n",ret); Sleep(0); //switch back to root domain mono_domain_set(domain,0); mono_domain_unload(child); mono_runtime_set_shutting_down (); mono_threads_set_shutting_down (); mono_thread_pool_cleanup (); mono_domain_finalize(mono_get_root_domain(),2000); mono_runtime_cleanup(mono_get_root_domain()); printf("Unloading mono\n"); #if LOADDYNAMIC CleanupMono(); #endif while(1){} //sleep so stale monothreads have a chance to crash return 0; }
MonoDomain *create_domain(const String &p_friendly_name) { MonoDomain *domain = mono_domain_create_appdomain((char *)p_friendly_name.utf8().get_data(), NULL); if (domain) { // Workaround to avoid this exception: // System.Configuration.ConfigurationErrorsException: Error Initializing the configuration system. // ---> System.ArgumentException: The 'ExeConfigFilename' argument cannot be null. mono_domain_set_config(domain, ".", ""); } return domain; }
CScriptDomain::CScriptDomain(const char *name, const char *configurationFile, bool setActive) : m_bRootDomain(false) , m_bDestroying(false) , m_name(name) { m_pDomain = mono_domain_create_appdomain(const_cast<char *>(name), const_cast<char *>(configurationFile)); CRY_ASSERT(m_pDomain); mono_domain_set_config(m_pDomain, PathUtils::GetBinaryPath(), PathUtils::GetMonoConfigPath().append("mono\\4.5\\machine.config")); if(setActive) SetActive(); }
MonoDomain* load_domain() { MonoDomain* newDomain = mono_domain_create_appdomain("CCubed Child Domain", NULL); if (!newDomain) { printf("Error creating domain\n"); return nullptr; } mono_thread_push_appdomain_ref(newDomain); if (!mono_domain_set(newDomain, false)) { printf_console("Error setting domain\n"); return nullptr; } return mono_domain_get(); }
void MonoManager::loadScriptDomain() { if (mScriptDomain != nullptr) unloadScriptDomain(); if (mScriptDomain == nullptr) { char domainName[] = "ScriptDomain"; mScriptDomain = mono_domain_create_appdomain(domainName, nullptr); mono_domain_set(mScriptDomain, false); if (mScriptDomain == nullptr) { BS_EXCEPT(InternalErrorException, "Cannot create script app domain."); } } if (mScriptDomain != nullptr) { for (auto& assemblyEntry : mAssemblies) initializeAssembly(*assemblyEntry.second); } }