钩子函数问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 02:31:57
是这样的,这个问题一直不明白?
钩子函数是如此定义的;
在LRESULT CALLBACK func(int m,WPARAM p,LPARAM j)中
代码有一条是CWPSTRUCT* o=(CWPSTRUCT*) j;
已知CWPSTRUCT是一个数据结构。
居然能强制转成LPARAM类型的数据???
难道windows中的LPARAM宏定义是一个结构?
j变量到底是什么类型?

下面是定义LPARAM的语句
typedef LONG_PTR LPARAM;

#if defined(_WIN64)
typedef __int64 LONG_PTR;
#else
typedef long LONG_PTR;
#endif

这里的LPARAM实际上相当于一个long或者__int64,存放在j中的是一个CWPSTRUCT类型的指针,而指针仅仅是一个32位或64位的整数,存放在一个long或者__int64类型的变量中没有什么不妥吧。参考代码:
#include <stdio.h>

void main()
{
long pt;
int i = 1234;
pt = (long)&i;
printf("%d\n", *((int *)pt));
}

LPARAM事实上一个指针。
你完全可以把他强制转换成任意一个指针,或者一个4字节的类型,比如DOWRD,LONG,int等。因此这样强制转换没有什么不可以。也是钩子函数传递自定义变量所需要的。就是这样。