CallFunctionByNameWithArguments支持返回值获取

UE4中,使用C++与蓝图交互时,通常利用CallFunctionByNameWithArguments函数调用UObject派生类的方法。然而,该函数默认不处理返回值。为了解决这个问题,可以通过重载UObject的ProcessEvent函数来获取返回值。通过解析UFunction参数并临时存储,可以在适当时候返回函数调用的返回值。参考代码可在GitHub的litar77/CallFunctionByNameReturnValue项目中找到。
摘要由CSDN通过智能技术生成

        ue4中C++与l蓝图交互或外部程序基于字符串调用UObject派生类函数时会常用到CallFunctionByNameWithArguments函数,调用时一个比较麻烦的问题时调用完了无法获取返回值,主要原因是该函数在调用ProcessEvent函数时,并没对函数调用返回值进行处理,而是直接忽略掉了,而实际上该函数中完全可以获得函数的返回值。

	// Call native function or UObject::ProcessInternal.
		const bool bHasReturnParam = Function->ReturnValueOffset != MAX_uint16;
		uint8* ReturnValueAddress = bHasReturnParam ? ((uint8*)Parms + Function->ReturnValueOffset) : nullptr;
		Function->Invoke(this, NewStack, ReturnValueAddress);

    为了能够对函数返回值进行处理,我们的思路就是重载UObject的ProcessEvent函数,这个函数恰好是虚函数。

	/** Called by VM to execute a UFunction with a filled in UStruct of parameters */
	virtual void ProcessEvent( UFunction* Function, void* Parms );

    重载该函数后,需要使用UFunction参数处理的一些方法,重新解析返回值,并且通过成员变量作临时保存,然后在合适的地方将临时保存的返回值作为调用返回值返回出去,主要实现代码如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山中涛大爷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值