c++ - 如何获取指向函数第一个参数的指针?

标签 c++ memory reflection stack unreal-engine4

我想用相同的参数反射调用函数而不需要手动处理参数(将来这将是宏,这将是自动的)。

UFUNCTION()
void PleaseRespawnMe(FName className)
{
    uint64 _frame;  // Here is stack pointer?

    UFunction* func = GetController()->ServerCheatManager->FindFunction("PleaseRespawnMe");  // function with same name
    void* startStack = (void*)(&_frame - func->ParmsSize);  // Start stack is pointer to first variable minus params size?
    GetController()->ServerCheatManager->ProcessEvent(func, startStack);  // calling using pointer of first argument
}

但是 &_frame 指针离 &className 太远了。是否有使用局部变量地址获取 args 指针的解决方案?

附言这是Unreal Engine 4框架(按名称调用函数是unreal反射系统)。

最佳答案

我通过搜索 FindFunction( 检查了代码并找到了这个:for (TFieldIterator<UProperty> ,我想这就是你想要的。

我用我的 UFUNCTION 测试了它迭代器遍历输入参数然后返回值。

我建议搜索for (TFieldIterator<UProperty>for (TFieldIterator<UProperty> It(Function);查看用例,并记下属性标志,这有助于过滤您正在寻找的特定属性。

关于c++ - 如何获取指向函数第一个参数的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41869678/

相关文章:

C++ delete [] - 如何检查是否为 "all is deleted"?

ios - 检查 iOS 应用程序在仪器中使用的内存

c# - 使用反射测试方法是否具有特定签名

c++ - 在 C++ std::vector 和 C 数组之间转换而不复制

c++ - 如何一次编译多个独立的CPP文件?

c++ - 当函数返回时,函数中分配的内存是否被释放?

objective-c - Objective-C 属性中转换为 Swift 4 时出现反射错误

c# - 没有反射的 MVC4

c++ - 为什么在C++中我无法使用参数化构造函数声明动态对象数组?

c++ - Type_traits *_v 变量模板实用程序顺序编译失败