与 PVOID 的参数类型不兼容
Incompatible with parameter type of PVOID
使用绕道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
签名(也可以在这里找到):
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* _std = new Std();
int m_Global_Key(int a1, int a2, int a3)
{
return _std->m_Key(a1, a2, a3);
}
或者你可以将 Std::m_Key 创建为静态函数,但它与全局函数没有太大区别。
相关文章:
- 从数组创建 Mat 时,'cv::Mat' 和 'int' 类型不兼容
- 错误:将"long int (*)[4]"分配给"long int [4][4]"时的类型不兼容
- 操作数类型不兼容("int"和"const char*")
- 不断增加的指针数组 错误:赋值中的类型不兼容
- 操作数类型不兼容("bool (*)()"和"bool")
- C++ 操作数类型不兼容("Movie"和"nullptr")
- 错误:在 GEANY 中将"int"赋值为"char [1]"时类型不兼容
- 使用三元条件运算符时操作数类型不兼容
- C++函数指针类型与 Linux 和 VMS 上的候选指针类型不兼容
- 将“char”分配给“char [100]”的类型不兼容
- C++指向函数作为参数的指针.数据类型不兼容
- 错误:操作数类型不兼容("int"和"const char*")c++
- 与 PVOID 的参数类型不兼容
- 在 malloc 中将"void*"分配给"char"------的类型不兼容
- 错误:将"int"赋值为"int[2]"时的类型不兼容
- 错误:将"char*"分配给"char [20]"时的类型不兼容
- 调用指向派生类成员的指针时,指向与对象类型不兼容的成员类型的指针
- 操作数类型不兼容"BSTR"和"const char*"
- 对float[16]赋值时类型不兼容
- 错误:将'char*'分配给'char [4000]'的类型不兼容