使用绕道v3,我收到此错误:
argument of type "signed int (Std::*)(int a1, int a2, int a3)" is incompatible with parameter of type "PVOID" Std.cpp 39
当我尝试从我班上的一个函数中使用DetourAttach
时。
Std* _std = new Std();
case DLL_PROCESS_ATTACH:
DetourAttach(&(PVOID&)_std->m_pKey, &Std::m_Key);
// or if I do this
DetourAttach(&(PVOID&)_std->m_pKey, _std->m_Key);
// the error becomes Std::m_Key non-stardard syntax; use & to create a pointer to member
我知道我可以不使用课程这样做,但我希望这样做。有什么建议吗?
更新
DetourAttach
签名(也可以找到here):
LONG WINAPI DetourAttach(PVOID *ppPointer,
PVOID pDetour)
至于Std::m_Key
int Std::m_Key(int a1, int a2, int a3)
{
return m_pKey(a1, a2, a3);
}
答案 0 :(得分:2)
此功能签名是:
LONG DetourAttach(
PVOID * ppPointer,
PVOID pDetour
);
第一个参数是指向函数detoured
的指针。第二个是你自己的函数,将被调用。由于只能提供单个指针,因此无法在类实例上调用方法。要调用类实例方法,您需要一个指向类对象的指针和一个指向方法的指针。
所以你需要一个免费的功能(非会员)才能让它发挥作用。
[编辑]
你的自由函数可以调用std类实例方法:
Std* _std = new Std();
int m_Global_Key(int a1, int a2, int a3)
{
return _std->m_Key(a1, a2, a3);
}
或者你可以制作一个静态函数Std :: m_Key,但它与全局函数的区别不大。