【发布时间】:2011-01-18 18:08:08
【问题描述】:
我刚刚设法用 c++ 编写了一个全局 CBT 挂钩,可用于 c#。 这听起来可能很愚蠢,但由于我使用 c# 的工作,我对指针和取消引用的了解非常糟糕。
我无法取消引用 lParam 指向的结构内的指针。
看起来像这样:lParam 是一个指向 CBT_CREATEWND 结构的长指针,该结构又包含一个成员“lpcs”和一个指向 CREATESTRUCT 的指针。这个结构包含一个我想阅读的成员“x”。我尝试了以下方法,但我得到的 x 值无效:
CREATESTRUCT str = *(LPCREATESTRUCT)(((LPCBT_CREATEWND)lParam)->lpcs);
int normal = str.x;
PostMessage(FindWindow(NULL, L"Process Watcher Window"), RegisterWindowMessage(L"ALEXX_SEINE_WNDMESSAGE_C"), wParam, normal);
有人可以帮帮我吗?
【问题讨论】:
-
取消引用部分看起来不错。你确定你正确调用了 api 函数来获取值吗?
-
你不能这样做吗:LPCREATESTRUCT str = (LPCREATESTRUCT)(((LPCBT_CREATEWND)lParam)->lpcs);其次是 int normal = str->x;
-
@Michael :不需要(LPCREATESTRUCT)演员表。
lpcs已经是LPCREATESTRUCT类型。
标签: c++ pointers dereference