说我有一些windows方法和结构:
struct SomeStruct{
int foo;
int bar;
int baz;
int bat;
}
SomeMethod(int a,int wParam, int lParam)
{
SomeStruct s;
// get lParam into SomeStruct
}
如何将lParam放入SomeStruct变量?我想我需要这样的东西(但是随意指出我的无知):
SomeMethod(int a, int wParam, int lParam)
{
SomeStruct *s; //declare struct variable
s = lParam; //assign integer value as pointer to struct
printf("the value of s.foo is %d", s.foo); //print result
}
答案 0 :(得分:7)
是的,假设lParam'确实'包含指向结构的指针,那么你可以通过'cast'得到它:
SomeStruct* s; //declare pointer-to-struct variable
s = (SomeStruct*) lParam; //assign integer value as pointer to struct
printf("the value of s->foo is %d", s->foo); //print result
答案 1 :(得分:1)
lParam和wParam通常分别是WPARAM和LPARAM类型变量的名称。 WPARAM和LPARAM类型的变量用于在SendMessage,PostMessage,WindowProc,DefWindowProc - MS Windows API以及消息处理程序(通常但不恰当地称为事件处理程序)中声明参数。 历史性地,在16位版本的Windows中,WPARAM定义为WORD(16位)值,LPARAM定义为LONG;这解释了名字。 这两个参数都用作无类型cookie,它在消息中携带一些信息,包含值或包含由消息处理程序处理的更多信息的实体的地址。 在16位世界中,WPARAM用于携带近地址,而LPARAM用于携带远地址。 WPARAM和LPARAM现在定义为32位值。在WinDef.h中的SDK(软件开发工具包)中。 WPARAM在早期版本的SDK中定义为UINT,现在定义为UINT_PTR。 LPARAM在早期版本的SDK中保持定义为LONG,现在为LONG_PTR
答案 2 :(得分:0)
将整数转换为指针时要小心。在x64体系结构上,int
仍然是32位整数,但指针是64位。
答案 3 :(得分:0)
请使用正确的类型,否则您的代码将在Win64上失败。
SomeMethod(int a, WPARAM wParam, LPARAM lParam)
{
SomeStruct *s = (SomeStruct *) lParam;
printf("the value of s.foo is %d", s.foo); //print result
}
答案 4 :(得分:-1)
抱歉,尝试将整数转换为指针是一个巨大的错误。要使用未定义的类型指针,只需使用 void指针。而不是:
struct SomeStruct {
int foo;
int bar;
int baz;
int bat;
}
SomeMethod(int a, int wParam, int lParam)
{
SomeStruct *s; //declare struct variable
s = lParam; //assign integer value as pointer to struct
printf("the value of s.foo is %d", s.foo); //print result
}
您可以使用:
struct SomeStruct {
int foo;
int bar;
int baz;
int bat;
}
SomeMethod(int a, int wParam, void *lParam)
{
struct SomeStruct *s; //declare struct variable
s = (struct SomeStruct *)lParam; //assign integer value as pointer to struct
printf("the value of s.foo is %d", s->foo); //print result
}
在哪里也可以使用结构的具体指针:
SomeMethod(int a, int wParam, struct SomeStruct *lParam)
{
printf("the value of s.foo is %d", lParam->foo); //print result
}
尝试阅读有关C的一些提示,例如C-FAQ。