From 87e423ed48d6a3e1b7bbf010e1f1d1eb55e2afaf Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 13 Mar 2025 22:31:01 +0100 Subject: [PATCH] Fix regression in C++ objects created from C# code to link managed instance properly --- Source/Engine/Scripting/BinaryModule.cpp | 8 ++------ Source/Engine/Scripting/ScriptingObject.cpp | 6 +++++- 2 files changed, 7 insertions(+), 7 deletions(-) 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) {