diff --git a/Source/Engine/Scripting/Runtime/DotNet.cpp b/Source/Engine/Scripting/Runtime/DotNet.cpp index 7f82f8dfc..1d2dc1af1 100644 --- a/Source/Engine/Scripting/Runtime/DotNet.cpp +++ b/Source/Engine/Scripting/Runtime/DotNet.cpp @@ -41,12 +41,18 @@ #include #include #include +#include #include #include +#include #include #include typedef char char_t; #define DOTNET_HOST_MONO_DEBUG 0 +#ifdef USE_MONO_AOT_MODULE +void* MonoAotModuleHandle = nullptr; +#endif +MonoDomain* MonoDomainHandle = nullptr; #else #error "Unknown .NET runtime host." #endif @@ -516,6 +522,12 @@ void MCore::GC::FreeMemory(void* ptr, bool coTaskMem) void MCore::Thread::Attach() { +#if DOTNET_HOST_MONO + if (!IsInMainThread() && !mono_domain_get()) + { + mono_thread_attach(MonoDomainHandle); + } +#endif } void MCore::Thread::Exit() @@ -1767,11 +1779,6 @@ void* GetStaticMethodPointer(const String& methodName) #elif DOTNET_HOST_MONO -#ifdef USE_MONO_AOT_MODULE -void* MonoAotModuleHandle = nullptr; -#endif -MonoDomain* MonoDomainHandle = nullptr; - void OnLogCallback(const char* logDomain, const char* logLevel, const char* message, mono_bool fatal, void* userData) { String currentDomain(logDomain);