私はそのメモリアドレスを通して関数を呼び出そうとしています。メモリアドレスを持つ関数を宣言する
私が何かやった:
int GetNewValue(int args)
{
return args * 2;
}
int main()
{
/*
Function address: 0x22feac
*/
int(*GetVal)(int) = 0x22feac; // instead of '&GetNewValue'
}
をしかし、コンパイル時に、私は次のエラーを取得する:
[Error] invalid conversion from
int
toint (*)(int)
[-fpermissive
]
は、私がそのアドレスからメソッドを呼び出すことができますどのように?
(上記の例を注意してください簡単にするための定数を使用しますが、私の実際のコードでは、私はDLLインジェクションから関数をフックしています。)
あなたは 'reinterpret_cast'を使うことができますが、なぜこれをやっていますか? –
あなたはそのintでキャストゲームを行うことができますが、なぜですか? C++のタイピングルールは、この種のものを防ぐために設計されています。 – user4581301
これをコンパイルするには?これを 'int(* GetVal)(int)=(int(*)(int))0x22feac;'に変更してください。しかし、これはUDです、あなたはそれがほしいと確信していますか? – DeiDei