不兼容的参数类型PVOID
问题描述:
使用弯路V3的,我得到这个错误。不兼容的参数类型PVOID
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);
}
答
此功能的签名是:
LONG DetourAttach(
PVOID * ppPointer,
PVOID pDetour
);
第一个参数是指向函数的指针为detoured
。第二个是你自己的函数,会被调用。由于只能提供单个指针,因此您无法在您的类实例上调用方法。要调用一个类实例方法,你需要一个指向你的类对象的指针和一个指向方法的指针。
所以你需要一个免费的功能(非会员)才能使它工作。
[编辑]
您的免费功能,可以打电话给你标准类的实例方法:
Std* _std = new Std();
int m_Global_Key(int a1, int a2, int a3)
{
return _std->m_Key(a1, a2, a3);
}
或者你可以做的std :: m_Key,静态的功能,但它不会从全球太大的差别功能。
请提供一些更多信息。 'DetourAttach'的签名是什么?什么是“Std :: m_Key”的类型? 'DetourAttach'对它的参数做了什么,你想传递什么?一个[mcve]将是理想的。 – Angew
&(PVOID&)显然是错误的。这意味着你正在传递一个指针指向一个类型为void – Chris