[UE] Bug: 基于模板的静态绑定,使用扩展函数功能时编译报错
Closed this issue · 5 comments
前置阅读 | Pre-reading
Puer的版本 | Puer Version
1.0.5
UE的版本 | UE Version
5.3.2
发生在哪个平台 | Platform
Editor(win)
错误信息 | Error Message
No response
问题重现 | Bug reproduce
使用MakeExtension导出扩展函数时,编译报错
扩展代码如下:
struct FGameplayEffectContextHandleExtension
{
static FPRGameplayEffectContext* GetEffectContext(FGameplayEffectContextHandle& EffectContextHandle)
{
return static_cast<FPRGameplayEffectContext*>(EffectContextHandle.Get());
}
};
puerts::DefineClass<FGameplayEffectContextHandle>()
.Method("GetEffectContext", MakeExtension(&FGameplayEffectContextHandleExtension::GetEffectContext))
.Register();
报错信息如下:
0>StaticCall.hpp(819): Error C3861 : “GetArgsLen”: 找不到标识符
0>StaticCall.hpp(819): Reference C3861 : “GetArgsLen”: 函数未在模板定义上下文中声明,只能通过实例化上下文中参数相关的查找找到
0>StaticCall.hpp(886): Reference C3861 : 查看对正在编译的函数 模板 实例化“bool puerts::internal::FuncCallHelper<API,std::pair<Ret,std::tuple<>>,false,false,true,false>::callExtension<Ins,FPRGameplayEffectContext*(__cdecl *)(FGameplayEffectContextHandle &),,>(Func &,puerts::v8_impl::API::CallbackInfoType,std::integer_sequence<size_t>)”的引用
with
[
API=puerts::v8_impl::API,
Ret=FPRGameplayEffectContext *,
Ins=FirstDecayType,
Func=FPRGameplayEffectContext *(__cdecl )(FGameplayEffectContextHandle &)
]
0>StaticCall.hpp(897): Reference C3861 : 查看对正在编译的函数 模板 实例化“bool puerts::internal::FuncCallHelper<API,std::pair<Ret,std::tuple<>>,false,false,true,false>::callExtension<Ins,FPRGameplayEffectContext(__cdecl *)(FGameplayEffectContextHandle &),,>(Func &,puerts::v8_impl::API::CallbackInfoType,std::integer_sequence<size_t>)”的引用
with
[
API=puerts::v8_impl::API,
Ret=FPRGameplayEffectContext *,
Ins=FirstDecayType,
Func=FPRGameplayEffectContext *(__cdecl )(FGameplayEffectContextHandle &)
]
0>StaticCall.hpp(966): Reference C3861 : 查看对正在编译的函数 模板 实例化“bool puerts::internal::FuncCallHelper<API,std::pair<Ret,std::tuple<>>,false,false,true,false>::callExtension<FirstDecayType,FPRGameplayEffectContext(__cdecl *)(FGameplayEffectContextHandle &),>(Func &&,puerts::v8_impl::API::CallbackInfoType)”的引用
with
[
API=puerts::v8_impl::API,
Ret=FPRGameplayEffectContext *,
Func=FPRGameplayEffectContext *(__cdecl )(FGameplayEffectContextHandle &)
]
0>StaticCall.hpp(970): Reference C3861 : 查看对正在编译的函数 模板 实例化“bool puerts::internal::FuncCallHelper<API,std::pair<Ret,std::tuple<>>,false,false,true,false>::callExtension<FirstDecayType,FPRGameplayEffectContext(__cdecl *)(FGameplayEffectContextHandle &),>(Func &&,puerts::v8_impl::API::CallbackInfoType)”的引用
with
[
API=puerts::v8_impl::API,
Ret=FPRGameplayEffectContext *,
Func=FPRGameplayEffectContext *(__cdecl *)(FGameplayEffectContextHandle &)
]
0>StaticCall.hpp(975): Reference C3861 : 查看对正在编译的函数 模板 实例化“void puerts::FuncCallWrapper<puerts::v8_impl::API,FPRGameplayEffectContext *(__cdecl *)(FGameplayEffectContextHandle &),FPRGameplayEffectContext *FGameplayEffectContextHandleExtension::GetEffectContext(FGameplayEffectContextHandle &),false,true,false>::ExtensionCallHelper<FGameplayEffectContextHandle &>::call<>(puerts::v8_impl::API::CallbackInfoType)”的引用
0>StaticCall.hpp(976): Reference C3861 : 查看对正在编译的函数 模板 实例化“void puerts::FuncCallWrapper<puerts::v8_impl::API,FPRGameplayEffectContext *(__cdecl *)(FGameplayEffectContextHandle &),FPRGameplayEffectContext *FGameplayEffectContextHandleExtension::GetEffectContext(FGameplayEffectContextHandle &),false,true,false>::ExtensionCallHelper<FGameplayEffectContextHandle &>::call<>(puerts::v8_impl::API::CallbackInfoType)”的引用
0>JsExtension_Product.cpp(44): Reference C3861 : 查看对正在编译的函数 模板 实例化“void puerts::FuncCallWrapper<puerts::v8_impl::API,FPRGameplayEffectContext *(__cdecl *)(FGameplayEffectContextHandle &),FPRGameplayEffectContext *FGameplayEffectContextHandleExtension::GetEffectContext(FGameplayEffectContextHandle &),false,true,false>::callExtensionWithDefaultValues<>(puerts::v8_impl::API::CallbackInfoType)”的引用
0>JsExtension_Product.cpp(44): Reference C3861 : 查看对正在编译的函数 模板 实例化“void puerts::FuncCallWrapper<puerts::v8_impl::API,FPRGameplayEffectContext *(__cdecl *)(FGameplayEffectContextHandle &),FPRGameplayEffectContext *FGameplayEffectContextHandleExtension::GetEffectContext(FGameplayEffectContextHandle &),false,true,false>::callExtensionWithDefaultValues<>(puerts::v8_impl::API::CallbackInfoType)”的引用
是最新的代码吗?更新到最新代码
你这个问题最新版本应该已经解决了
我刚才确认了一下 我们目前的puerts是在2024.1.18从master上合并下来的,也就是说已经包含到了Unreal_v1.0.6p1
麻烦告知一下这个bug是在哪次提交修复的,我确认一下我们是否已经更新到了这次修复
更新后正常了