@@ -657,17 +657,19 @@ int WrapNativeCallFunction(lua_State* L, int ParamIndex, UObject *ThisObject, FC
657
657
int StackSize = DynamicFunc->ParmsSize ;
658
658
UFunction* Function = DynamicFunc->Function ;
659
659
int nParamCount = DynamicFunc->ParamCount ;
660
- const FCDynamicProperty* BeginProperty = DynamicFunc->m_Property .data ();
661
- const FCDynamicProperty* EndProperty = BeginProperty + nParamCount;
662
- const FCDynamicProperty* DynamicProperty = BeginProperty;
660
+ FCDynamicProperty* BeginProperty = DynamicFunc->m_Property .data ();
661
+ FCDynamicProperty* EndProperty = BeginProperty + nParamCount;
662
+ FCDynamicProperty* DynamicProperty = (FCDynamicProperty *) BeginProperty;
663
663
uint8* Frame = Buffer;
664
664
int nAllBuffSize = Function->PropertiesSize + Function->ParmsSize ;
665
- int OuterAddrOffset = nAllBuffSize;
666
- int OutParmRecOffset = OuterAddrOffset + DynamicFunc->OuterParamSize ;
665
+ // int OuterAddrOffset = nAllBuffSize;
666
+ // int OutParmRecOffset = OuterAddrOffset + DynamicFunc->OuterParamSize;
667
+ int OutParmRecOffset = nAllBuffSize;
667
668
int OuterIndesOffset = OutParmRecOffset;
668
669
if (DynamicFunc->bOuter )
669
670
{
670
- nAllBuffSize += DynamicFunc->OuterParamSize + sizeof (FOutParmRec) * DynamicFunc->OuterParamCount ;
671
+ // nAllBuffSize += DynamicFunc->OuterParamSize + sizeof(FOutParmRec) * DynamicFunc->OuterParamCount;
672
+ nAllBuffSize += sizeof (FOutParmRec) * DynamicFunc->OuterParamCount ;
671
673
OuterIndesOffset = nAllBuffSize;
672
674
nAllBuffSize += sizeof (short ) * DynamicFunc->OuterParamCount ;
673
675
}
@@ -682,7 +684,7 @@ int WrapNativeCallFunction(lua_State* L, int ParamIndex, UObject *ThisObject, FC
682
684
int Index = ParamIndex;
683
685
uint8 *Locals = Frame;
684
686
uint8 *ValueAddr = Locals;
685
- uint8 *OuterAddr = Locals + OuterAddrOffset;
687
+ // uint8 *OuterAddr = Locals + OuterAddrOffset;
686
688
FOutParmRec* FristOuterParms = (FOutParmRec*)(Locals + OutParmRecOffset);
687
689
FOutParmRec* OuterParms = FristOuterParms;
688
690
int LatentPropertyIndex = DynamicFunc->LatentPropertyIndex ;
@@ -698,17 +700,21 @@ int WrapNativeCallFunction(lua_State* L, int ParamIndex, UObject *ThisObject, FC
698
700
FLatentActionInfo LatentActionInfo (ThreadRef, GetTypeHash (FGuid::NewGuid ()), TEXT (" OnLatentActionCompleted" ), GetScriptContext ()->m_Ticker );
699
701
DynamicProperty->Property ->CopySingleValue (ValueAddr, &LatentActionInfo);
700
702
}
703
+ DynamicProperty->bTempNeedRef = true ;
704
+ DynamicProperty->bTempRealRef = false ;
701
705
DynamicProperty->m_ReadScriptFunc (L, Index, DynamicProperty, ValueAddr, nullptr , nullptr );
706
+ DynamicProperty->bTempNeedRef = false ;
702
707
703
708
if (DynamicProperty->bOuter )
704
709
{
705
710
*OuterIndexs++ = (short )(Index - ParamIndex);
706
711
// DynamicProperty->Property->InitializeValue(OuterAddr);
707
- OuterParms->NextOutParm = nullptr ;
708
- OuterParms->Property = (FProperty*)DynamicProperty->Property ;
709
- OuterParms->PropAddr = ValueAddr;
710
712
// OuterParms->PropAddr = OuterAddr;
711
713
// OuterAddr += DynamicProperty->Property->ElementSize;
714
+
715
+ OuterParms->PropAddr = ValueAddr;
716
+ OuterParms->NextOutParm = nullptr ;
717
+ OuterParms->Property = (FProperty*)DynamicProperty->Property ;
712
718
if (OuterParms != FristOuterParms)
713
719
{
714
720
(OuterParms-1 )->NextOutParm = OuterParms;
@@ -787,7 +793,8 @@ int WrapNativeCallFunction(lua_State* L, int ParamIndex, UObject *ThisObject, FC
787
793
for (; DynamicProperty < EndProperty; ++DynamicProperty)
788
794
{
789
795
ValueAddr = Locals + DynamicProperty->Offset_Internal ;
790
- DynamicProperty->Property ->DestroyValue (ValueAddr);
796
+ if (!DynamicProperty->bTempRealRef )
797
+ DynamicProperty->Property ->DestroyValue (ValueAddr);
791
798
}
792
799
793
800
// 释放临时内存
0 commit comments