这个是我查到的代码,也是论坛里一位大神写的typedef
HRESULT (STDMETHODCALLTYPE * LPFN_HOOKPROC)(IDirect3DDevice *pThis);LPFN_HOOKPROC Proc;HRESULT STDMETHODCALLTYPE HookEndScene(IDirect3DDevice *pThis)
{
return Proc(pThis);
}void Hook(IDirect3DDevice *lpDev)
{
PVOID pVmt = *((PVOID*)lpDev);//从接口指针找VMT指针
DWORD dwProtect;
VirtualProtect(&((PVOID*)pVmt)[20], sizeof(PVOID), PAGE_READWRITE, &dwProtect);
Proc = ((LPFN_HOOKPROC*)pVmt)[20];//把VMT中第20个方法地址保存到Proc中
((LPFN_HOOKPROC*)pVmt)[20] = &HookEndScene;//把HookEndScene方法地址写到VMT中
VirtualProtect(&((PVOID*)pVmt)[20], sizeof(PVOID), dwProtect, &dwProtect);
}然后放到vs2010中,就会报错
VirtualProtect(&(PVOID*)pvmt[17],sizeof(PVOID),PAGE_READWRITE,&dwProtect);
VirtualProtect(&(PVOID*)pvmt[17],sizeof(PVOID),dwProtect,&dwProtect);
这两句的错误是一样的,都是
error C2036: “PVOID”: 未知的大小
error C2440: “类型转换”: 无法从“void”转换为“PVOID *”
1> void 类型的表达式不能转换为其他类型
是因为vs2010对这方面有新的要求了吗? 还是本来就是错的?
求各位大神指点一下
HRESULT (STDMETHODCALLTYPE * LPFN_HOOKPROC)(IDirect3DDevice *pThis);LPFN_HOOKPROC Proc;HRESULT STDMETHODCALLTYPE HookEndScene(IDirect3DDevice *pThis)
{
return Proc(pThis);
}void Hook(IDirect3DDevice *lpDev)
{
PVOID pVmt = *((PVOID*)lpDev);//从接口指针找VMT指针
DWORD dwProtect;
VirtualProtect(&((PVOID*)pVmt)[20], sizeof(PVOID), PAGE_READWRITE, &dwProtect);
Proc = ((LPFN_HOOKPROC*)pVmt)[20];//把VMT中第20个方法地址保存到Proc中
((LPFN_HOOKPROC*)pVmt)[20] = &HookEndScene;//把HookEndScene方法地址写到VMT中
VirtualProtect(&((PVOID*)pVmt)[20], sizeof(PVOID), dwProtect, &dwProtect);
}然后放到vs2010中,就会报错
VirtualProtect(&(PVOID*)pvmt[17],sizeof(PVOID),PAGE_READWRITE,&dwProtect);
VirtualProtect(&(PVOID*)pvmt[17],sizeof(PVOID),dwProtect,&dwProtect);
这两句的错误是一样的,都是
error C2036: “PVOID”: 未知的大小
error C2440: “类型转换”: 无法从“void”转换为“PVOID *”
1> void 类型的表达式不能转换为其他类型
是因为vs2010对这方面有新的要求了吗? 还是本来就是错的?
求各位大神指点一下
解决方案 »
- 急需!!!pcm格式语音在vc下的编码解码代码!
- VC下IO Stream的使用疑问
- 请问如何终止一个对话框的程序
- 请问哪位大侠有MFC写的记事本的源何代码??在线等!!!!!
- 让PlaySound或者sndPlaySound输出声音到指定设备
- 如何实现双击文档自动打开程序
- 用vc的win32 dll项能建立象mfc extented dll项的能输出c++类的dll吗?
- 我用vc编写了一个socket服务器端的软件,客户端用c++builder调用,可是单数时能收到,其余收不到,不只为何
- vc使用web browser 控件的问题
- 请问:.img的文件是用什么合并打开?是软盘镜象文件?有什么工具?拜托了!!!bow
- 我感觉MFC类库真的好垃圾啊?请推荐个更好的类库?
- 请问为什么IE加载不了ActiveX控件
你直接用 int* 什么的不就OK
int WINAPI HookVtbl(void* pObject, unsigned int classIdx, unsigned int methodIdx, int newMethod)
{
int** vtbl = (int**)pObject;
DWORD oldProtect = 0;
int oldMethod = vtbl[classIdx][methodIdx];
VirtualProtect(vtbl[classIdx] + sizeof(int*) * methodIdx, sizeof(int*), PAGE_READWRITE, &oldProtect);
vtbl[classIdx][methodIdx] = newMethod;
VirtualProtect(vtbl[classIdx] + sizeof(int*) * methodIdx, sizeof(int*), oldProtect, &oldProtect);
return oldMethod;
}