[英]Accessing struct members by a pointer
我有一個多實例對話框,其HWND和DC包含在結構向量中。 在調用CreateWindowEx()
之前,我為該結構的新實例分配了內存,並將其指針傳遞給WndProc(使用lpParam
)。
在WndProc內部,我有以下代碼:
HexParams Hex;
HexParams *pHex;
if (uMsg == WM_NCCREATE) {
SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR) ((CREATESTRUCT *)lParam)->lpCreateParams);
return TRUE;
} else {
LONG_PTR lpUserData = GetWindowLongPtr(hDlg, GWLP_USERDATA);
if (lpUserData) {
pHex = (HexParams *)lpUserData;
Hex = *pHex;
} else
return DefWindowProc(hDlg, uMsg, wParam, lParam);
}
然后在整個WndProc中,我一直在使用Hex.Member
來訪問其memebr,對其進行讀取並對其進行寫入(如果是在單個實例且該結構為全局結構時遺留下來的)。 因此,當我添加多實例支持時,我希望簡單地取消引用指針就可以使我從該向量獲得struct memebres。
但是,以下示例做了不同的事情:
Hex.DC = GetDC(hDlg);
pHex->DC = GetDC(hDlg);
盡管執行了Hex = *pHex;
在它之前。 pHex->DC
寫入我的向量元素,但是Hex.DC
寫入我無法弄清楚的地方。 有沒有辦法在代碼中保留Hex.Member
用法,或者我必須將它們全部轉換為pHex->Member
?
我可能是“缺少指針的要點”,但是在這里我無法獲得如何正確使用它們的信息。
Hex
是在該函數中定義的變量。 在此函數調用的堆棧上,寫入Hex.DC
將引用該結構內的4個字節。
pHex
指向呼叫者確定的某個地方。 Hex = *pHex;
會將到達的結構的內容復制到您的本地結構。 它們是不同的內存塊。
繪制堆棧的圖片,遮擋呼叫的激活幀,然后在其中填充十六進制。 繪制其他分配了內存的塊(全局,動態,早期調用),並向其繪制箭頭以指示指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.