diff --git a/Source/Engine/Scripting/BinaryModule.cpp b/Source/Engine/Scripting/BinaryModule.cpp index dd493d2de..643588ee1 100644 --- a/Source/Engine/Scripting/BinaryModule.cpp +++ b/Source/Engine/Scripting/BinaryModule.cpp @@ -796,12 +796,8 @@ ScriptingObject* ManagedBinaryModule::ManagedObjectSpawn(const ScriptingObjectSp // Mark as managed type object->Flags |= ObjectFlags::IsManagedType; - // Initialize managed instance - if (params.Managed) - { - object->SetManagedInstance((MObject*)params.Managed); - } - else + // Initialize managed instance (ScriptingObject ctor copies managed object handle) + if (!params.Managed) { // Invoke managed ctor (to match C++ logic) object->CreateManaged(); diff --git a/Source/Engine/Scripting/ScriptingObject.cpp b/Source/Engine/Scripting/ScriptingObject.cpp index 14ce087cf..9ac973cc9 100644 --- a/Source/Engine/Scripting/ScriptingObject.cpp +++ b/Source/Engine/Scripting/ScriptingObject.cpp @@ -89,7 +89,11 @@ void SerializableScriptingObject::Deserialize(DeserializeStream& stream, ISerial } ScriptingObject::ScriptingObject(const SpawnParams& params) - : _gcHandle(0) +#if USE_NETCORE + : _gcHandle((MGCHandle)params.Managed) +#elif !COMPILE_WITHOUT_CSHARP + : _gcHandle(params.Managed ? MCore::GCHandle::New(params.Managed) : 0) +#endif , _type(params.Type) , _id(params.ID) {