2017-01-26 21 views
2

私は同じ引数で関数を呼び出す必要がありますが、手作業でパラメータをコピーする必要はありません(将来はマクロになりますが、これは自動的に行われます)。関数の最初の引数へのポインタを取得するには?

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のポインタを取得するソリューションはありますか?

P.S.これは、Unreal Engine 4フレームワークです(名前を呼び出す関数は、Unreal Reflection Systemです)。

+2

「手作業でパラメータをコピーしない」代わりに参照を渡すのはどうですか? – SingerOfTheFall

+0

@SingerOfTheFallしかし、コードでこのパラメータ名を使用せずに参照を取得するには?将来のマクロでは、直接処理をパラメータに減らす必要があります。 – Broly

答えて

0

FindFunction(を検索してコードを確認したところ、for (TFieldIterator<UProperty>が見つかりました。これはあなたが望むものだと思います。

私はUFUNCTIONでそれをテストし、イテレータは入力パラメータと戻り値を実行します。

for (TFieldIterator<UProperty>またはfor (TFieldIterator<UProperty> It(Function);を検索して使用例を確認し、特定のプロパティをフィルタリングするのに役立つプロパティフラグをメモすることをお勧めします。

+0

関数のパラメータ(UProperties)の反映データです。この関数のパラメータに渡された実際のデータは含まれていません。 私は、省略記号( '...' - 'void func(uint8 param、...);')のような関数の引数のアドレスを取得するには、引数リストの前の変数のアドレスで取得する必要があります。 – Broly

+0

'void * startStack'は関数の最初の引数ですか?私はあなたが 'UFunction * func'に渡そうとしていた議論がどれか分かりません。 –

+0

サンプル関数 'static void Call(UObject * Target、const TCHAR * FunctionName、void * Args = nullptr)'が見つかりました。 –

関連する問題