簡體   English   中英

解引用指針C ++

[英]Dereferencing pointer C++

我只是設法用c ++編寫了一個可用於c#的全局CBT鈎子。 聽起來可能很愚蠢,但是由於我使用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);

有人可以幫我嗎?

好吧,我真的不能說出為什么您會得到無效的x值的細節,但是我可能會以不同的方式編寫這段代碼:

// the way you had it, it was making a copy of the CREATESTRUCT and storing it in str
// this just uses a pointer
LPCREATESTRUCT str = ((LPCBT_CREATEWND)lParam)->lpcs;
// when you have a pointer, use -> to use a member
int normal = str->x;

因為您說過您是指針的新手,所以我會解釋->一點。 當您編寫x->y ,它實際上與(*x).y相同,但是語法更好。

還要注意一些建議,而這段代碼中的強制轉換似乎很合理。 通常,如果您發現自己投放過多,則可能是困難的方法還是錯誤的方法。 因此,請確保您花時間了解您執行的所有強制轉換。

您的語法似乎已簽出,盡管可能有點LPCREATESTRUCT ,並且LPCREATESTRUCT顯然是不必要的。

您提到x值無效,也許lParam實際上不是指向CBT_CREATEWND結構的指針? 您是否在強制轉換lParam之前檢查了回調函數的nCode是否等於HCBT_CREATEWND

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM